diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..1ff94f7 --- /dev/null +++ b/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["next/babel"] +} diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..35e915e --- /dev/null +++ b/.eslintignore @@ -0,0 +1,3 @@ +**/node_modules/* +**/out/* +**/.next/* diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..6dd5286 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,47 @@ +{ + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint"], + "extends": [ + "eslint:recommended", + "plugin:react/recommended", + "plugin:@typescript-eslint/recommended" + // Uncomment the following lines to enable eslint-config-prettier + // Is not enabled right now to avoid issues with the Next.js repo + // "prettier", + ], + "env": { + "es6": true, + "browser": true, + "jest": true, + "node": true + }, + "settings": { + "react": { + "version": "detect" + } + }, + "rules": { + "react/react-in-jsx-scope": 0, + "react/display-name": 0, + "react/prop-types": 0, + "@typescript-eslint/explicit-function-return-type": 0, + "@typescript-eslint/explicit-member-accessibility": 0, + "@typescript-eslint/indent": 0, + "@typescript-eslint/member-delimiter-style": 0, + "@typescript-eslint/no-explicit-any": 0, + "@typescript-eslint/no-var-requires": 0, + "@typescript-eslint/no-use-before-define": 0, + "@typescript-eslint/no-unused-vars": [ + 2, + { + "argsIgnorePattern": "^_" + } + ], + "no-console": [ + 2, + { + "allow": ["warn", "error"] + } + ] + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1437c53 --- /dev/null +++ b/.gitignore @@ -0,0 +1,34 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env.local +.env.development.local +.env.test.local +.env.production.local + +# vercel +.vercel diff --git a/.history/.env_20220613182216.local b/.history/.env_20220613182216.local new file mode 100644 index 0000000..e69de29 diff --git a/.history/.env_20220613182253.local b/.history/.env_20220613182253.local new file mode 100644 index 0000000..61ab8a7 --- /dev/null +++ b/.history/.env_20220613182253.local @@ -0,0 +1,12 @@ +// .env.local + +USER_="crapshr6_robotop" +HOST="crapshr6.beget.tech" +DATABASE="crapshr6_pizza" +PASSWORD="M2PJD&wG" + +MAILSERVER="smtp.beget.com" +MAILNAME="service@vsst.su" +MAILPASS = "&ekS0NPD" + +SITE="http://localhost:3000/api/" \ No newline at end of file diff --git a/.history/.env_20220613182355.local b/.history/.env_20220613182355.local new file mode 100644 index 0000000..e1270af --- /dev/null +++ b/.history/.env_20220613182355.local @@ -0,0 +1,12 @@ +// .env.local + +USER_="crapshr6_robotop" +HOST="crapshr6.beget.tech" +DATABASE="crapshr6_robotop" +PASSWORD="5NC*%v0v" + +MAILSERVER="smtp.beget.com" +MAILNAME="service@vsst.su" +MAILPASS = "&ekS0NPD" + +SITE="http://localhost:3000/api/" \ No newline at end of file diff --git a/.history/.env_20220613182359.local b/.history/.env_20220613182359.local new file mode 100644 index 0000000..e1270af --- /dev/null +++ b/.history/.env_20220613182359.local @@ -0,0 +1,12 @@ +// .env.local + +USER_="crapshr6_robotop" +HOST="crapshr6.beget.tech" +DATABASE="crapshr6_robotop" +PASSWORD="5NC*%v0v" + +MAILSERVER="smtp.beget.com" +MAILNAME="service@vsst.su" +MAILPASS = "&ekS0NPD" + +SITE="http://localhost:3000/api/" \ No newline at end of file diff --git a/.history/.env_20220613183941.local b/.history/.env_20220613183941.local new file mode 100644 index 0000000..a1d837d --- /dev/null +++ b/.history/.env_20220613183941.local @@ -0,0 +1,12 @@ +// .env.local + +USER_="crapshr6_robotop" +HOST="crapshr6.beget.tech" +DATABASE="crapshr6_robotop" +PASSWORD="sJ9&alNk" + +MAILSERVER="smtp.beget.com" +MAILNAME="service@vsst.su" +MAILPASS = "&ekS0NPD" + +SITE="http://localhost:3000/api/" \ No newline at end of file diff --git a/.history/README_20220703210635.md b/.history/README_20220703210635.md new file mode 100644 index 0000000..8780b75 --- /dev/null +++ b/.history/README_20220703210635.md @@ -0,0 +1,32 @@ +# NextJS - Typescript - MDX - Blog + +A Next.js starter for your next blog or personal site. Built with: + +- [Typescript](https://www.typescriptlang.org/) +- Write posts with [MDX](https://mdxjs.com/) +- Style with [Tailwind CSS](https://tailwindcss.com/) +- Linting with [ESLint](https://eslint.org/) +- Formatting with [Prettier](https://prettier.io/) +- Linting, typechecking and formatting on by default using [`husky`](https://github.com/typicode/husky) for commit hooks +- Testing with [Jest](https://jestjs.io/) and [`react-testing-library`](https://testing-library.com/docs/react-testing-library/intro) + +This Starter is **heavily** inspired by [Lee Robinson](https://github.com/leerob/leerob.io) and [Anson Lichtfuss](https://github.com/ansonlichtfuss/website). + +👀 [View the Live Demo](https://nextjs-typescript-mdx-blog.vercel.app/) + +## Getting Started + +```bash +git clone https://github.com/ChangoMan/nextjs-typescript-mdx-blog.git +cd nextjs-typescript-mdx-blog + +yarn install +# or +npm install + +yarn dev +# or +npm run dev +``` + +Your new site will be up at http://localhost:3000/ diff --git a/.history/README_20220703210732.md b/.history/README_20220703210732.md new file mode 100644 index 0000000..f90e1ac --- /dev/null +++ b/.history/README_20220703210732.md @@ -0,0 +1,3 @@ +# NextJS - Typescript - MDX - Blog + +A Next.js starter for your next blog or personal site. Built with: \ No newline at end of file diff --git a/.history/README_20220703211017.md b/.history/README_20220703211017.md new file mode 100644 index 0000000..7a90798 --- /dev/null +++ b/.history/README_20220703211017.md @@ -0,0 +1,3 @@ +# RoboTop - Сайт для робототехнического фестиваля + +Next.js \ No newline at end of file diff --git a/.history/components/Head_20210629061557.tsx b/.history/components/Head_20210629061557.tsx new file mode 100644 index 0000000..448e833 --- /dev/null +++ b/.history/components/Head_20210629061557.tsx @@ -0,0 +1,42 @@ +import NextHead from 'next/head'; +import { useRouter } from 'next/router'; +import React from 'react'; +import { MetaProps } from '../types/layout'; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Head = ({ customMeta }: { customMeta?: MetaProps }): JSX.Element => { + const router = useRouter(); + const meta: MetaProps = { + title: 'Hunter Chang - Website', + description: + 'Sleep Deprived Father. Senior Web Developer. Lover of all things Ramen and Kpop.', + image: `${WEBSITE_HOST_URL}/images/site-preview.png`, + type: 'website', + ...customMeta, + }; + + return ( + + {meta.title} + + + + + + + + + + + + + + {meta.date && ( + + )} + + ); +}; + +export default Head; diff --git a/.history/components/Head_20220613104435.tsx b/.history/components/Head_20220613104435.tsx new file mode 100644 index 0000000..21d23c1 --- /dev/null +++ b/.history/components/Head_20220613104435.tsx @@ -0,0 +1,42 @@ +import NextHead from 'next/head'; +import { useRouter } from 'next/router'; +import React from 'react'; +import { MetaProps } from '../types/layout'; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Head = ({ customMeta }: { customMeta?: MetaProps }): JSX.Element => { + const router = useRouter(); + const meta: MetaProps = { + title: 'РоботТоп - робототехнический фестиваль', + description: + 'Sleep Deprived Father. Senior Web Developer. Lover of all things Ramen and Kpop.', + image: `${WEBSITE_HOST_URL}/images/site-preview.png`, + type: 'website', + ...customMeta, + }; + + return ( + + {meta.title} + + + + + + + + + + + + + + {meta.date && ( + + )} + + ); +}; + +export default Head; diff --git a/.history/components/Head_20220702135959.tsx b/.history/components/Head_20220702135959.tsx new file mode 100644 index 0000000..08f7526 --- /dev/null +++ b/.history/components/Head_20220702135959.tsx @@ -0,0 +1,42 @@ +import NextHead from 'next/head'; +import { useRouter } from 'next/router'; +import React from 'react'; +import { MetaProps } from '../types/layout'; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Head = ({ customMeta }: { customMeta?: MetaProps }): JSX.Element => { + const router = useRouter(); + const meta: MetaProps = { + title: 'РоботТоп - робототехнический фестиваль', + description: + 'РоботТОП – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.', + image: `${WEBSITE_HOST_URL}/images/site-preview.png`, + type: 'website', + ...customMeta, + }; + + return ( + + {meta.title} + + + + + + + + + + + + + + {meta.date && ( + + )} + + ); +}; + +export default Head; diff --git a/.history/components/LaodingComandForm_20220701202504.tsx b/.history/components/LaodingComandForm_20220701202504.tsx new file mode 100644 index 0000000..e69de29 diff --git a/.history/components/LaodingComandForm_20220701202526.tsx b/.history/components/LaodingComandForm_20220701202526.tsx new file mode 100644 index 0000000..de48fca --- /dev/null +++ b/.history/components/LaodingComandForm_20220701202526.tsx @@ -0,0 +1,12 @@ +import React from 'react'; + +export const RegistrationForm = (): JSX.Element => { + + return ( + <> + + + ); +}; + +export default RegistrationForm; diff --git a/.history/components/Layout_20210629061557.tsx b/.history/components/Layout_20210629061557.tsx new file mode 100644 index 0000000..5fed6f5 --- /dev/null +++ b/.history/components/Layout_20210629061557.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220611153924.tsx b/.history/components/Layout_20220611153924.tsx new file mode 100644 index 0000000..05c582f --- /dev/null +++ b/.history/components/Layout_20220611153924.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220611153935.tsx b/.history/components/Layout_20220611153935.tsx new file mode 100644 index 0000000..490cf31 --- /dev/null +++ b/.history/components/Layout_20220611153935.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220611154155.tsx b/.history/components/Layout_20220611154155.tsx new file mode 100644 index 0000000..dabd4f8 --- /dev/null +++ b/.history/components/Layout_20220611154155.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702183857.tsx b/.history/components/Layout_20220702183857.tsx new file mode 100644 index 0000000..26eeb8e --- /dev/null +++ b/.history/components/Layout_20220702183857.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702183915.tsx b/.history/components/Layout_20220702183915.tsx new file mode 100644 index 0000000..6442bba --- /dev/null +++ b/.history/components/Layout_20220702183915.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702183941.tsx b/.history/components/Layout_20220702183941.tsx new file mode 100644 index 0000000..64bcba4 --- /dev/null +++ b/.history/components/Layout_20220702183941.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702183948.tsx b/.history/components/Layout_20220702183948.tsx new file mode 100644 index 0000000..28e5d07 --- /dev/null +++ b/.history/components/Layout_20220702183948.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702184012.tsx b/.history/components/Layout_20220702184012.tsx new file mode 100644 index 0000000..d9ea824 --- /dev/null +++ b/.history/components/Layout_20220702184012.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702184020.tsx b/.history/components/Layout_20220702184020.tsx new file mode 100644 index 0000000..28e5d07 --- /dev/null +++ b/.history/components/Layout_20220702184020.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702184148.tsx b/.history/components/Layout_20220702184148.tsx new file mode 100644 index 0000000..2129f13 --- /dev/null +++ b/.history/components/Layout_20220702184148.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702184157.tsx b/.history/components/Layout_20220702184157.tsx new file mode 100644 index 0000000..d4aeeac --- /dev/null +++ b/.history/components/Layout_20220702184157.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702184204.tsx b/.history/components/Layout_20220702184204.tsx new file mode 100644 index 0000000..28e5d07 --- /dev/null +++ b/.history/components/Layout_20220702184204.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702184210.tsx b/.history/components/Layout_20220702184210.tsx new file mode 100644 index 0000000..a75c7e8 --- /dev/null +++ b/.history/components/Layout_20220702184210.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702184216.tsx b/.history/components/Layout_20220702184216.tsx new file mode 100644 index 0000000..9f57a25 --- /dev/null +++ b/.history/components/Layout_20220702184216.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702184221.tsx b/.history/components/Layout_20220702184221.tsx new file mode 100644 index 0000000..a87ba36 --- /dev/null +++ b/.history/components/Layout_20220702184221.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702184224.tsx b/.history/components/Layout_20220702184224.tsx new file mode 100644 index 0000000..28e5d07 --- /dev/null +++ b/.history/components/Layout_20220702184224.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702184228.tsx b/.history/components/Layout_20220702184228.tsx new file mode 100644 index 0000000..7951fdb --- /dev/null +++ b/.history/components/Layout_20220702184228.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702184232.tsx b/.history/components/Layout_20220702184232.tsx new file mode 100644 index 0000000..20f0160 --- /dev/null +++ b/.history/components/Layout_20220702184232.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702184235.tsx b/.history/components/Layout_20220702184235.tsx new file mode 100644 index 0000000..bf37190 --- /dev/null +++ b/.history/components/Layout_20220702184235.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702184237.tsx b/.history/components/Layout_20220702184237.tsx new file mode 100644 index 0000000..28e5d07 --- /dev/null +++ b/.history/components/Layout_20220702184237.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702184239.tsx b/.history/components/Layout_20220702184239.tsx new file mode 100644 index 0000000..9b40080 --- /dev/null +++ b/.history/components/Layout_20220702184239.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702184242.tsx b/.history/components/Layout_20220702184242.tsx new file mode 100644 index 0000000..07546d7 --- /dev/null +++ b/.history/components/Layout_20220702184242.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702184247.tsx b/.history/components/Layout_20220702184247.tsx new file mode 100644 index 0000000..c923e2b --- /dev/null +++ b/.history/components/Layout_20220702184247.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702184250.tsx b/.history/components/Layout_20220702184250.tsx new file mode 100644 index 0000000..4cf7e97 --- /dev/null +++ b/.history/components/Layout_20220702184250.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702184252.tsx b/.history/components/Layout_20220702184252.tsx new file mode 100644 index 0000000..eced56c --- /dev/null +++ b/.history/components/Layout_20220702184252.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702184301.tsx b/.history/components/Layout_20220702184301.tsx new file mode 100644 index 0000000..28e5d07 --- /dev/null +++ b/.history/components/Layout_20220702184301.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702184509.tsx b/.history/components/Layout_20220702184509.tsx new file mode 100644 index 0000000..064534c --- /dev/null +++ b/.history/components/Layout_20220702184509.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702184514.tsx b/.history/components/Layout_20220702184514.tsx new file mode 100644 index 0000000..28e5d07 --- /dev/null +++ b/.history/components/Layout_20220702184514.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702184522.tsx b/.history/components/Layout_20220702184522.tsx new file mode 100644 index 0000000..a19e43c --- /dev/null +++ b/.history/components/Layout_20220702184522.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/Layout_20220702184526.tsx b/.history/components/Layout_20220702184526.tsx new file mode 100644 index 0000000..28e5d07 --- /dev/null +++ b/.history/components/Layout_20220702184526.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/.history/components/LoadingTeamsForm_20220701202525.tsx b/.history/components/LoadingTeamsForm_20220701202525.tsx new file mode 100644 index 0000000..de48fca --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701202525.tsx @@ -0,0 +1,12 @@ +import React from 'react'; + +export const RegistrationForm = (): JSX.Element => { + + return ( + <> + + + ); +}; + +export default RegistrationForm; diff --git a/.history/components/LoadingTeamsForm_20220701202621.tsx b/.history/components/LoadingTeamsForm_20220701202621.tsx new file mode 100644 index 0000000..697efb5 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701202621.tsx @@ -0,0 +1,12 @@ +import React from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + + return ( + <> + + + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701202854.tsx b/.history/components/LoadingTeamsForm_20220701202854.tsx new file mode 100644 index 0000000..72223ea --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701202854.tsx @@ -0,0 +1,45 @@ +import React from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + + return ( + <> + + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+ + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701202934.tsx b/.history/components/LoadingTeamsForm_20220701202934.tsx new file mode 100644 index 0000000..e377a6a --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701202934.tsx @@ -0,0 +1,47 @@ +import React from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => console.log(json.user)) + return ( + <> + + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+ + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701202947.tsx b/.history/components/LoadingTeamsForm_20220701202947.tsx new file mode 100644 index 0000000..e377a6a --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701202947.tsx @@ -0,0 +1,47 @@ +import React from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => console.log(json.user)) + return ( + <> + + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+ + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701203044.tsx b/.history/components/LoadingTeamsForm_20220701203044.tsx new file mode 100644 index 0000000..4dcd80b --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701203044.tsx @@ -0,0 +1,47 @@ +import React from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => console.log(res)) + return ( + <> + + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+ + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701203119.tsx b/.history/components/LoadingTeamsForm_20220701203119.tsx new file mode 100644 index 0000000..95ef9a6 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701203119.tsx @@ -0,0 +1,47 @@ +import React from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => console.log(json)) + return ( + <> + + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+ + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701203333.tsx b/.history/components/LoadingTeamsForm_20220701203333.tsx new file mode 100644 index 0000000..1893654 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701203333.tsx @@ -0,0 +1,50 @@ +import React, {useState} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState(0); + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json.user)) + + console.log(user) + return ( + <> + + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+ + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701203352.tsx b/.history/components/LoadingTeamsForm_20220701203352.tsx new file mode 100644 index 0000000..d3d570e --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701203352.tsx @@ -0,0 +1,50 @@ +import React, {useState} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState(0); + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + + console.log(user) + return ( + <> + + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+ + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701203432.tsx b/.history/components/LoadingTeamsForm_20220701203432.tsx new file mode 100644 index 0000000..a6ee959 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701203432.tsx @@ -0,0 +1,51 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState(0); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + }); + console.log(user) + return ( + <> + + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+ + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701203502.tsx b/.history/components/LoadingTeamsForm_20220701203502.tsx new file mode 100644 index 0000000..70b28ac --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701203502.tsx @@ -0,0 +1,51 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState(0); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( + <> + + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+ + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701203513.tsx b/.history/components/LoadingTeamsForm_20220701203513.tsx new file mode 100644 index 0000000..d61bf8d --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701203513.tsx @@ -0,0 +1,51 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState(0); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( + <> + + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+ + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701203920.tsx b/.history/components/LoadingTeamsForm_20220701203920.tsx new file mode 100644 index 0000000..e859a66 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701203920.tsx @@ -0,0 +1,55 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState(0); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( + <> + + + + + + + + + + + {user.map((rows) => { + + + + + + + } + )} + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ {rows.team_name} + + {rows.training_institution_team} + + Иван, Петр, Дмитрий + + 1 +
+ + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701203941.tsx b/.history/components/LoadingTeamsForm_20220701203941.tsx new file mode 100644 index 0000000..dbb7dfb --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701203941.tsx @@ -0,0 +1,55 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( + <> + + + + + + + + + + + {user.map((rows) => { + + + + + + + } + )} + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ {rows.team_name} + + {rows.training_institution_team} + + Иван, Петр, Дмитрий + + 1 +
+ + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701204028.tsx b/.history/components/LoadingTeamsForm_20220701204028.tsx new file mode 100644 index 0000000..3e4cbb0 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701204028.tsx @@ -0,0 +1,55 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( + <> + + + + + + + + + + + {user.map((rows) => ( + + + + + + + ) + )} + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ {rows.team_name} + + {rows.training_institution_team} + + Иван, Петр, Дмитрий + + 1 +
+ + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701204102.tsx b/.history/components/LoadingTeamsForm_20220701204102.tsx new file mode 100644 index 0000000..ab679d5 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701204102.tsx @@ -0,0 +1,55 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( + <> + + + + + + + + + + + {user.map((rows,count) => ( + + + + + + + ) + )} + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ {rows.team_name} + + {rows.training_institution_team} + + Иван, Петр, Дмитрий + + 1 +
+ + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701204119.tsx b/.history/components/LoadingTeamsForm_20220701204119.tsx new file mode 100644 index 0000000..1cd0120 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701204119.tsx @@ -0,0 +1,54 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( + <> + + + + + + + + + + + {user.map((rows,count) => ( + + + + + + + ) + )} + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ {rows.team_name} + + {rows.training_institution_team} + + Иван, Петр, Дмитрий + + 1 +
+ + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701204712.tsx b/.history/components/LoadingTeamsForm_20220701204712.tsx new file mode 100644 index 0000000..cdf7e39 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701204712.tsx @@ -0,0 +1,60 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( + <> + + + + + + + + + + + + {user.map((rows,count) => ( + + + + + + + + ) + )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Класс +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + Иван, Петр, Дмитрий + + 1 +
+ + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701204818.tsx b/.history/components/LoadingTeamsForm_20220701204818.tsx new file mode 100644 index 0000000..1a7ed3d --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701204818.tsx @@ -0,0 +1,60 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( + <> + + + + + + + + + + + + {user.map((rows,count) => ( + + + + + + + + ) + )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Класс +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +' ' + rows.name_second_participant + ' ' + rows.name_third_party} + + 1 +
+ + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701204829.tsx b/.history/components/LoadingTeamsForm_20220701204829.tsx new file mode 100644 index 0000000..6f374f8 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701204829.tsx @@ -0,0 +1,60 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( + <> + + + + + + + + + + + + {user.map((rows,count) => ( + + + + + + + + ) + )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Класс +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + 1 +
+ + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701204855.tsx b/.history/components/LoadingTeamsForm_20220701204855.tsx new file mode 100644 index 0000000..b23162f --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701204855.tsx @@ -0,0 +1,60 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( + <> + + + + + + + + + + + + {user.map((rows,count) => ( + + + + + + + + ) + )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Класс +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', /n' + rows.name_second_participant + ', ' + rows.name_third_party} + + 1 +
+ + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701204859.tsx b/.history/components/LoadingTeamsForm_20220701204859.tsx new file mode 100644 index 0000000..b5433cf --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701204859.tsx @@ -0,0 +1,60 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( + <> + + + + + + + + + + + + {user.map((rows,count) => ( + + + + + + + + ) + )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Класс +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + 1 +
+ + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701205041.tsx b/.history/components/LoadingTeamsForm_20220701205041.tsx new file mode 100644 index 0000000..0169bd2 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701205041.tsx @@ -0,0 +1,82 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( + <>
+
+

Зарегистрированные команды

+
+ + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+
+ + + + + + + + + + + + {user.map((rows,count) => ( + + + + + + + + ) + )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Класс +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + 1 +
+ + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701205124.tsx b/.history/components/LoadingTeamsForm_20220701205124.tsx new file mode 100644 index 0000000..a44e276 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701205124.tsx @@ -0,0 +1,65 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( + <>
+
+

Зарегистрированные команды

+
+ + + + + + + + + + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Класс +
+
+ + {user.map((rows,count) => ( + + + {rows.team_name} + + + {rows.name_team_coach} + + + {rows.training_institution_team} + + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + + 1 + + + ) + )} + + + + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701205128.tsx b/.history/components/LoadingTeamsForm_20220701205128.tsx new file mode 100644 index 0000000..b0270c9 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701205128.tsx @@ -0,0 +1,65 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( + <>
+
+

Зарегистрированные команды

+
+ + + + + + + + + + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Класс +
+
+ + {user.map((rows,count) => ( + + + {rows.team_name} + + + {rows.name_team_coach} + + + {rows.training_institution_team} + + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + + 1 + + + ) + )} + + + + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701205153.tsx b/.history/components/LoadingTeamsForm_20220701205153.tsx new file mode 100644 index 0000000..f6e5d3a --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701205153.tsx @@ -0,0 +1,67 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( + <>
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + {user.map((rows,count) => ( + + + + + + + + ) + )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Класс +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + 1 +
+
+ + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701205330.tsx b/.history/components/LoadingTeamsForm_20220701205330.tsx new file mode 100644 index 0000000..2480d9d --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701205330.tsx @@ -0,0 +1,62 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows,count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Класс +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + 1 +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701205337.tsx b/.history/components/LoadingTeamsForm_20220701205337.tsx new file mode 100644 index 0000000..003b87d --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701205337.tsx @@ -0,0 +1,61 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows,count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Класс +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + 1 +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701210654.tsx b/.history/components/LoadingTeamsForm_20220701210654.tsx new file mode 100644 index 0000000..7db0754 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701210654.tsx @@ -0,0 +1,61 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows,count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701210745.tsx b/.history/components/LoadingTeamsForm_20220701210745.tsx new file mode 100644 index 0000000..aa66f19 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701210745.tsx @@ -0,0 +1,61 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows,count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {rows.class} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701210818.tsx b/.history/components/LoadingTeamsForm_20220701210818.tsx new file mode 100644 index 0000000..bdab960 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701210818.tsx @@ -0,0 +1,61 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows,count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(...rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701210826.tsx b/.history/components/LoadingTeamsForm_20220701210826.tsx new file mode 100644 index 0000000..3aa7288 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701210826.tsx @@ -0,0 +1,61 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows,count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701210843.tsx b/.history/components/LoadingTeamsForm_20220701210843.tsx new file mode 100644 index 0000000..8811395 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701210843.tsx @@ -0,0 +1,61 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows,count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min([rows.class])} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701210857.tsx b/.history/components/LoadingTeamsForm_20220701210857.tsx new file mode 100644 index 0000000..06ef298 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701210857.tsx @@ -0,0 +1,61 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701210907.tsx b/.history/components/LoadingTeamsForm_20220701210907.tsx new file mode 100644 index 0000000..400d253 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701210907.tsx @@ -0,0 +1,61 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class[0])} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701211023.tsx b/.history/components/LoadingTeamsForm_20220701211023.tsx new file mode 100644 index 0000000..9c809c4 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701211023.tsx @@ -0,0 +1,62 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701211259.tsx b/.history/components/LoadingTeamsForm_20220701211259.tsx new file mode 100644 index 0000000..942c88a --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701211259.tsx @@ -0,0 +1,62 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(parseInt(rows.class, 10))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701211402.tsx b/.history/components/LoadingTeamsForm_20220701211402.tsx new file mode 100644 index 0000000..0be24ee --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701211402.tsx @@ -0,0 +1,62 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(parseInt(rows.class))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701211417.tsx b/.history/components/LoadingTeamsForm_20220701211417.tsx new file mode 100644 index 0000000..9c809c4 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701211417.tsx @@ -0,0 +1,62 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701211429.tsx b/.history/components/LoadingTeamsForm_20220701211429.tsx new file mode 100644 index 0000000..e620d6b --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701211429.tsx @@ -0,0 +1,62 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min([4,5,7]} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701211437.tsx b/.history/components/LoadingTeamsForm_20220701211437.tsx new file mode 100644 index 0000000..0569c86 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701211437.tsx @@ -0,0 +1,62 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min((4,5,7)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701211447.tsx b/.history/components/LoadingTeamsForm_20220701211447.tsx new file mode 100644 index 0000000..05a02b7 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701211447.tsx @@ -0,0 +1,62 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(4,5,7)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701211457.tsx b/.history/components/LoadingTeamsForm_20220701211457.tsx new file mode 100644 index 0000000..9d7825a --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701211457.tsx @@ -0,0 +1,62 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(5,4,7)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701211518.tsx b/.history/components/LoadingTeamsForm_20220701211518.tsx new file mode 100644 index 0000000..9c809c4 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701211518.tsx @@ -0,0 +1,62 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701211528.tsx b/.history/components/LoadingTeamsForm_20220701211528.tsx new file mode 100644 index 0000000..f23bf7e --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701211528.tsx @@ -0,0 +1,62 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {rows.class} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701211541.tsx b/.history/components/LoadingTeamsForm_20220701211541.tsx new file mode 100644 index 0000000..9c809c4 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701211541.tsx @@ -0,0 +1,62 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user) + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701211603.tsx b/.history/components/LoadingTeamsForm_20220701211603.tsx new file mode 100644 index 0000000..d73198b --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701211603.tsx @@ -0,0 +1,63 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701211622.tsx b/.history/components/LoadingTeamsForm_20220701211622.tsx new file mode 100644 index 0000000..15e4e0a --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701211622.tsx @@ -0,0 +1,63 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(Math.min(user[3].class)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701211653.tsx b/.history/components/LoadingTeamsForm_20220701211653.tsx new file mode 100644 index 0000000..19e92ad --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701211653.tsx @@ -0,0 +1,63 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(Math.min(user[2].class)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701211719.tsx b/.history/components/LoadingTeamsForm_20220701211719.tsx new file mode 100644 index 0000000..d792691 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701211719.tsx @@ -0,0 +1,63 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(Math.min(5,2,6)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701211727.tsx b/.history/components/LoadingTeamsForm_20220701211727.tsx new file mode 100644 index 0000000..a676448 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701211727.tsx @@ -0,0 +1,63 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(Math.min(5,6,8)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701211732.tsx b/.history/components/LoadingTeamsForm_20220701211732.tsx new file mode 100644 index 0000000..4c736ac --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701211732.tsx @@ -0,0 +1,63 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(Math.min(8,6,8)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701211746.tsx b/.history/components/LoadingTeamsForm_20220701211746.tsx new file mode 100644 index 0000000..19e92ad --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701211746.tsx @@ -0,0 +1,63 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(Math.min(user[2].class)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701211806.tsx b/.history/components/LoadingTeamsForm_20220701211806.tsx new file mode 100644 index 0000000..e02662e --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701211806.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(Math.min(user[2].class)) + console.log(user[2].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701211820.tsx b/.history/components/LoadingTeamsForm_20220701211820.tsx new file mode 100644 index 0000000..bd3f691 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701211820.tsx @@ -0,0 +1,65 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(Math.min(user[2].class)) + console.log(user[2].class) + console.log(1,2,3) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701211936.tsx b/.history/components/LoadingTeamsForm_20220701211936.tsx new file mode 100644 index 0000000..da7665c --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701211936.tsx @@ -0,0 +1,65 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + console.log(Math.min(user[2].class)) + console.log(Number(user[2].class)) + console.log(1,2,3) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701211951.tsx b/.history/components/LoadingTeamsForm_20220701211951.tsx new file mode 100644 index 0000000..5dca266 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701211951.tsx @@ -0,0 +1,65 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(Number(user[2].class)) + console.log(1,2,3) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701211957.tsx b/.history/components/LoadingTeamsForm_20220701211957.tsx new file mode 100644 index 0000000..49ce3b6 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701211957.tsx @@ -0,0 +1,65 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(Number(user.class)) + console.log(1,2,3) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212007.tsx b/.history/components/LoadingTeamsForm_20220701212007.tsx new file mode 100644 index 0000000..93eb8b0 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212007.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(Number(user[1].class)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212014.tsx b/.history/components/LoadingTeamsForm_20220701212014.tsx new file mode 100644 index 0000000..8f52e79 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212014.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(Number(user[2].class)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212031.tsx b/.history/components/LoadingTeamsForm_20220701212031.tsx new file mode 100644 index 0000000..5df02ba --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212031.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(parseInt(user[2].class)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212045.tsx b/.history/components/LoadingTeamsForm_20220701212045.tsx new file mode 100644 index 0000000..c3e1eb1 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212045.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(parseInt(user[3].class)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212048.tsx b/.history/components/LoadingTeamsForm_20220701212048.tsx new file mode 100644 index 0000000..fe892ea --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212048.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(parseInt(user[4].class)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212051.tsx b/.history/components/LoadingTeamsForm_20220701212051.tsx new file mode 100644 index 0000000..21e0d04 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212051.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(parseInt(user[5].class)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212107.tsx b/.history/components/LoadingTeamsForm_20220701212107.tsx new file mode 100644 index 0000000..c847305 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212107.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(parseInt(user[6].class)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212111.tsx b/.history/components/LoadingTeamsForm_20220701212111.tsx new file mode 100644 index 0000000..02442c4 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212111.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(parseInt(user[1].class)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212120.tsx b/.history/components/LoadingTeamsForm_20220701212120.tsx new file mode 100644 index 0000000..5df02ba --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212120.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(parseInt(user[2].class)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212131.tsx b/.history/components/LoadingTeamsForm_20220701212131.tsx new file mode 100644 index 0000000..e4e33c8 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212131.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(parseInt(user[2].class, 10)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212154.tsx b/.history/components/LoadingTeamsForm_20220701212154.tsx new file mode 100644 index 0000000..02891a7 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212154.tsx @@ -0,0 +1,65 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + console.log(parseInt(json[2].class, 10)) + },[1]); + + + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212202.tsx b/.history/components/LoadingTeamsForm_20220701212202.tsx new file mode 100644 index 0000000..e4e33c8 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212202.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(parseInt(user[2].class, 10)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212217.tsx b/.history/components/LoadingTeamsForm_20220701212217.tsx new file mode 100644 index 0000000..d58ea04 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212217.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(user[2].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212224.tsx b/.history/components/LoadingTeamsForm_20220701212224.tsx new file mode 100644 index 0000000..19b7fc9 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212224.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212233.tsx b/.history/components/LoadingTeamsForm_20220701212233.tsx new file mode 100644 index 0000000..3b0e398 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212233.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(user[3]) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212252.tsx b/.history/components/LoadingTeamsForm_20220701212252.tsx new file mode 100644 index 0000000..ca4a1d9 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212252.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(user[3]) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(Number(rows.class))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212308.tsx b/.history/components/LoadingTeamsForm_20220701212308.tsx new file mode 100644 index 0000000..f69b07e --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212308.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(user[3]) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(parseInt(rows.class))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212336.tsx b/.history/components/LoadingTeamsForm_20220701212336.tsx new file mode 100644 index 0000000..b533e0d --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212336.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(user[3]) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(parseInt(rows.class,10))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212340.tsx b/.history/components/LoadingTeamsForm_20220701212340.tsx new file mode 100644 index 0000000..06fc1cf --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212340.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(user[3]) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(parseInt(rows.class,2))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212344.tsx b/.history/components/LoadingTeamsForm_20220701212344.tsx new file mode 100644 index 0000000..0bfa597 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212344.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(user[3]) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(parseInt(rows.class,3))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212348.tsx b/.history/components/LoadingTeamsForm_20220701212348.tsx new file mode 100644 index 0000000..77b196e --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212348.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(user[3]) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(parseInt(rows.class,16))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212351.tsx b/.history/components/LoadingTeamsForm_20220701212351.tsx new file mode 100644 index 0000000..b533e0d --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212351.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(user[3]) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(parseInt(rows.class,10))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212407.tsx b/.history/components/LoadingTeamsForm_20220701212407.tsx new file mode 100644 index 0000000..3fadf53 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212407.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(user[3]) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(parseFloat(rows.class,10))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220701212410.tsx b/.history/components/LoadingTeamsForm_20220701212410.tsx new file mode 100644 index 0000000..2aeddd9 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220701212410.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(user[3]) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(parseFloat(rows.class))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702123000.tsx b/.history/components/LoadingTeamsForm_20220702123000.tsx new file mode 100644 index 0000000..2aeddd9 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702123000.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(user[3]) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(parseFloat(rows.class))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702130044.tsx b/.history/components/LoadingTeamsForm_20220702130044.tsx new file mode 100644 index 0000000..ecb250c --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702130044.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(parseFloat(rows.class))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702130102.tsx b/.history/components/LoadingTeamsForm_20220702130102.tsx new file mode 100644 index 0000000..6380e5f --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702130102.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(parseFloat(user[3].class)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(parseFloat(rows.class))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702130109.tsx b/.history/components/LoadingTeamsForm_20220702130109.tsx new file mode 100644 index 0000000..6f44396 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702130109.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(parseInt(user[3].class)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(parseFloat(rows.class))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702130128.tsx b/.history/components/LoadingTeamsForm_20220702130128.tsx new file mode 100644 index 0000000..65b0d32 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702130128.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(parseInt(user[3].class, 10)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(parseFloat(rows.class))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702130137.tsx b/.history/components/LoadingTeamsForm_20220702130137.tsx new file mode 100644 index 0000000..7655732 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702130137.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(Number(user[3].class)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(parseFloat(rows.class))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702130225.tsx b/.history/components/LoadingTeamsForm_20220702130225.tsx new file mode 100644 index 0000000..64e6797 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702130225.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(JSON.parse(user[3].class)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(parseFloat(rows.class))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702130350.tsx b/.history/components/LoadingTeamsForm_20220702130350.tsx new file mode 100644 index 0000000..e1b6c18 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702130350.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(JSON.stringify(user[3].class)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(parseFloat(rows.class))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702130404.tsx b/.history/components/LoadingTeamsForm_20220702130404.tsx new file mode 100644 index 0000000..ecb250c --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702130404.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(parseFloat(rows.class))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702130410.tsx b/.history/components/LoadingTeamsForm_20220702130410.tsx new file mode 100644 index 0000000..da26e6a --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702130410.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(parseFloat(rows.class))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702130416.tsx b/.history/components/LoadingTeamsForm_20220702130416.tsx new file mode 100644 index 0000000..ecb250c --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702130416.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(parseFloat(rows.class))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702130443.tsx b/.history/components/LoadingTeamsForm_20220702130443.tsx new file mode 100644 index 0000000..e1b6c18 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702130443.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(JSON.stringify(user[3].class)) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(parseFloat(rows.class))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702130501.tsx b/.history/components/LoadingTeamsForm_20220702130501.tsx new file mode 100644 index 0000000..ecb250c --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702130501.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(parseFloat(rows.class))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702130506.tsx b/.history/components/LoadingTeamsForm_20220702130506.tsx new file mode 100644 index 0000000..014ab50 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702130506.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(JSON.stringify(rows.class))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702130511.tsx b/.history/components/LoadingTeamsForm_20220702130511.tsx new file mode 100644 index 0000000..4401725 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702130511.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(JSON.stringify(rows.class))} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702130540.tsx b/.history/components/LoadingTeamsForm_20220702130540.tsx new file mode 100644 index 0000000..3159886 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702130540.tsx @@ -0,0 +1,64 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + {Math.min(rows.class)} +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702130919.tsx b/.history/components/LoadingTeamsForm_20220702130919.tsx new file mode 100644 index 0000000..907ef2a --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702130919.tsx @@ -0,0 +1,70 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const arrOfNum = arrOfStr.map(str => { + return Number(str); + }) + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { rows.class.forEach(str => { + Math.min(Number(str)); + }) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702130930.tsx b/.history/components/LoadingTeamsForm_20220702130930.tsx new file mode 100644 index 0000000..2007be2 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702130930.tsx @@ -0,0 +1,68 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { rows.class.forEach(str => { + Math.min(Number(str)); + }) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702130948.tsx b/.history/components/LoadingTeamsForm_20220702130948.tsx new file mode 100644 index 0000000..d0af4cd --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702130948.tsx @@ -0,0 +1,68 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { rows.forEach(str => { + Math.min(Number(str)); + }) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702131020.tsx b/.history/components/LoadingTeamsForm_20220702131020.tsx new file mode 100644 index 0000000..868976c --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702131020.tsx @@ -0,0 +1,68 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { rows.class.forEach((str: any) => { + Math.min(Number(str)); + }) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702131136.tsx b/.history/components/LoadingTeamsForm_20220702131136.tsx new file mode 100644 index 0000000..27f828d --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702131136.tsx @@ -0,0 +1,67 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + rows.class.forEach(element => element) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702131153.tsx b/.history/components/LoadingTeamsForm_20220702131153.tsx new file mode 100644 index 0000000..90608a5 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702131153.tsx @@ -0,0 +1,67 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + rows.class + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702131742.tsx b/.history/components/LoadingTeamsForm_20220702131742.tsx new file mode 100644 index 0000000..2156118 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702131742.tsx @@ -0,0 +1,72 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + rows.class.forEach((word) => { + console.log(word); + if (word === 'two') { + rows.class.shift(); //'one' will delete from array + } + + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702131825.tsx b/.history/components/LoadingTeamsForm_20220702131825.tsx new file mode 100644 index 0000000..908dd07 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702131825.tsx @@ -0,0 +1,71 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + rows.class.forEach((word) => { + if (word === 'two') { + rows.class.shift(); //'one' will delete from array + } + } ) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702131903.tsx b/.history/components/LoadingTeamsForm_20220702131903.tsx new file mode 100644 index 0000000..90608a5 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702131903.tsx @@ -0,0 +1,67 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + rows.class + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702131940.tsx b/.history/components/LoadingTeamsForm_20220702131940.tsx new file mode 100644 index 0000000..26be2ec --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702131940.tsx @@ -0,0 +1,77 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const flatten = (arr) => { + const result = []; + arr.forEach((i) => { + if (Array.isArray(i)) { + result.push(...flatten(i)); + } else { + result.push(i); + } + }); + return result; + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702132025.tsx b/.history/components/LoadingTeamsForm_20220702132025.tsx new file mode 100644 index 0000000..ae243e0 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702132025.tsx @@ -0,0 +1,78 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const flatten = (arr) => { + const result = []; + console.log(arr); + arr.forEach((i) => { + if (Array.isArray(i)) { + result.push(...flatten(i)); + } else { + result.push(i); + } + }); + return result; + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702132036.tsx b/.history/components/LoadingTeamsForm_20220702132036.tsx new file mode 100644 index 0000000..2e7a420 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702132036.tsx @@ -0,0 +1,78 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const flatten = (arr) => { + const result = []; + console.log(arr); + /* arr.forEach((i) => { + if (Array.isArray(i)) { + result.push(...flatten(i)); + } else { + result.push(i); + } + });*/ + return result; + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702132100.tsx b/.history/components/LoadingTeamsForm_20220702132100.tsx new file mode 100644 index 0000000..76c3bc9 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702132100.tsx @@ -0,0 +1,79 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const flatten = (arr) => { + const result = []; + Math.min(arr) + console.log(arr); + /* arr.forEach((i) => { + if (Array.isArray(i)) { + result.push(...flatten(i)); + } else { + result.push(i); + } + });*/ + return result; + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702132109.tsx b/.history/components/LoadingTeamsForm_20220702132109.tsx new file mode 100644 index 0000000..57e0264 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702132109.tsx @@ -0,0 +1,79 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const flatten = (arr) => { + const result = []; + + console.log(Math.min(arr)); + /* arr.forEach((i) => { + if (Array.isArray(i)) { + result.push(...flatten(i)); + } else { + result.push(i); + } + });*/ + return result; + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702132130.tsx b/.history/components/LoadingTeamsForm_20220702132130.tsx new file mode 100644 index 0000000..97d6386 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702132130.tsx @@ -0,0 +1,78 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const flatten = (arr) => { + const result = []; + console.log(Math.min(arr)); + arr.forEach((i) => { + if (Array.isArray(i)) { + result.push(...flatten(i)); + } else { + result.push(i); + } + }); + return result; + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702132203.tsx b/.history/components/LoadingTeamsForm_20220702132203.tsx new file mode 100644 index 0000000..ae4925c --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702132203.tsx @@ -0,0 +1,74 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const flatten = (arr) => { + const result = []; + + arr.forEach((i) => { + console.log(i); + }); + return result; + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702132220.tsx b/.history/components/LoadingTeamsForm_20220702132220.tsx new file mode 100644 index 0000000..17ed481 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702132220.tsx @@ -0,0 +1,72 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const flatten = (arr) => { + const result = []; + console.log(arr); + + return result; + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702132249.tsx b/.history/components/LoadingTeamsForm_20220702132249.tsx new file mode 100644 index 0000000..8665c91 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702132249.tsx @@ -0,0 +1,72 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const flatten = (arr) => { + const result = []; + console.log(arr); + + return arr; + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702132255.tsx b/.history/components/LoadingTeamsForm_20220702132255.tsx new file mode 100644 index 0000000..6011d94 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702132255.tsx @@ -0,0 +1,71 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const flatten = (arr) => { + console.log(arr); + + return arr; + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702132310.tsx b/.history/components/LoadingTeamsForm_20220702132310.tsx new file mode 100644 index 0000000..a4755a0 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702132310.tsx @@ -0,0 +1,71 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const flatten = (arr) => { + console.log([arr]); + + return arr; + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702132442.tsx b/.history/components/LoadingTeamsForm_20220702132442.tsx new file mode 100644 index 0000000..705fc3b --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702132442.tsx @@ -0,0 +1,71 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const flatten = (arr) => { + console.log(arr.split(',')); + + return arr; + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702132516.tsx b/.history/components/LoadingTeamsForm_20220702132516.tsx new file mode 100644 index 0000000..47d2d7c --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702132516.tsx @@ -0,0 +1,71 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const flatten = (arr) => { + console.log(Math.min(arr.split(','))); + + return arr; + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702132553.tsx b/.history/components/LoadingTeamsForm_20220702132553.tsx new file mode 100644 index 0000000..5e9a55d --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702132553.tsx @@ -0,0 +1,71 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const flatten = (arr) => { + console.log(Math.min(Number(arr.split(',')))); + + return arr; + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702132606.tsx b/.history/components/LoadingTeamsForm_20220702132606.tsx new file mode 100644 index 0000000..b07425a --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702132606.tsx @@ -0,0 +1,71 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const flatten = (arr) => { + console.log(Number(arr.split(','))); + + return arr; + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702132617.tsx b/.history/components/LoadingTeamsForm_20220702132617.tsx new file mode 100644 index 0000000..705fc3b --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702132617.tsx @@ -0,0 +1,71 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const flatten = (arr) => { + console.log(arr.split(',')); + + return arr; + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702132729.tsx b/.history/components/LoadingTeamsForm_20220702132729.tsx new file mode 100644 index 0000000..892c66c --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702132729.tsx @@ -0,0 +1,79 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const arrOfStr = ['1', '2', '3']; + + const arrOfNum = []; + + + const flatten = (arr) => { + //console.log(arr.split(',')); + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + console.log(arrOfNum); + return arr; + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702132749.tsx b/.history/components/LoadingTeamsForm_20220702132749.tsx new file mode 100644 index 0000000..733993b --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702132749.tsx @@ -0,0 +1,75 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const flatten = (arr) => { + const arrOfNum = []; + //console.log(arr.split(',')); + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + console.log(arrOfNum); + return arr; + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702132813.tsx b/.history/components/LoadingTeamsForm_20220702132813.tsx new file mode 100644 index 0000000..9677252 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702132813.tsx @@ -0,0 +1,75 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const flatten = (arr) => { + const arrOfNum = []; + //console.log(arr.split(',')); + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + console.log(Math.min(arrOfNum)); + return arr; + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702132835.tsx b/.history/components/LoadingTeamsForm_20220702132835.tsx new file mode 100644 index 0000000..1b0baf5 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702132835.tsx @@ -0,0 +1,76 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const ff = [4,7,2] + const flatten = (arr) => { + const arrOfNum = []; + //console.log(arr.split(',')); + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + console.log(Math.min(ff)); + return arr; + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702132929.tsx b/.history/components/LoadingTeamsForm_20220702132929.tsx new file mode 100644 index 0000000..16c354f --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702132929.tsx @@ -0,0 +1,76 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const ff = [4,7,2] + const flatten = (arr) => { + const arrOfNum = []; + //console.log(arr.split(',')); + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + console.log(Math.min(...ff)); + return arr; + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702132952.tsx b/.history/components/LoadingTeamsForm_20220702132952.tsx new file mode 100644 index 0000000..5b5fd03 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702132952.tsx @@ -0,0 +1,76 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const ff = [4,7,2] + const flatten = (arr) => { + const arrOfNum = []; + //console.log(arr.split(',')); + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + console.log(Math.min(...arr)); + return arr; + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702133000.tsx b/.history/components/LoadingTeamsForm_20220702133000.tsx new file mode 100644 index 0000000..89ab9de --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702133000.tsx @@ -0,0 +1,76 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const ff = [4,7,2] + const flatten = (arr) => { + const arrOfNum = []; + //console.log(arr.split(',')); + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + console.log(Math.min(...arrOfNum)); + return arr; + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702133022.tsx b/.history/components/LoadingTeamsForm_20220702133022.tsx new file mode 100644 index 0000000..4d3c661 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702133022.tsx @@ -0,0 +1,76 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const ff = [4,7,2] + const flatten = (arr) => { + const arrOfNum = []; + //console.log(arr.split(',')); + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + console.log(Math.min(...arrOfNum)); + return Math.min(...arrOfNum); + } + //console.log(user[3].class) + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702133052.tsx b/.history/components/LoadingTeamsForm_20220702133052.tsx new file mode 100644 index 0000000..d19a56a --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702133052.tsx @@ -0,0 +1,73 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const flatten = (arr) => { + const arrOfNum = []; + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + + return Math.min(...arrOfNum); + } + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702133055.tsx b/.history/components/LoadingTeamsForm_20220702133055.tsx new file mode 100644 index 0000000..31639e3 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702133055.tsx @@ -0,0 +1,72 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const flatten = (arr) => { + const arrOfNum = []; + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + return Math.min(...arrOfNum); + } + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { + flatten(rows.class) + } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702133115.tsx b/.history/components/LoadingTeamsForm_20220702133115.tsx new file mode 100644 index 0000000..d74d564 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702133115.tsx @@ -0,0 +1,70 @@ +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const flatten = (arr) => { + const arrOfNum = []; + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + return Math.min(...arrOfNum); + } + + return ( +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {user.map((rows, count) => ( + + + + + + + + ) )} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+ {rows.team_name} + + {rows.name_team_coach} + + {rows.training_institution_team} + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + { flatten(rows.class) } +
+
+ ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702143924.tsx b/.history/components/LoadingTeamsForm_20220702143924.tsx new file mode 100644 index 0000000..6881894 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702143924.tsx @@ -0,0 +1,45 @@ +import { tr } from 'date-fns/locale'; +import React, {useState, useEffect} from 'react'; + +export const LoadingTeamsForm = (): JSX.Element => { + const [user, setUser] = useState([]); + useEffect(() => { + fetch('/api/loadingLegisteredCommands', { method: 'POST'}) + .then(res => res.json()) + .then(json => setUser(json)) + },[1]); + + const flatten = (arr) => { + const arrOfNum = []; + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + return Math.min(...arrOfNum); + } + + return ( + + {user.map((rows, count) => ( + + + {rows.team_name} + + + {rows.name_team_coach} + + + {rows.training_institution_team} + + + {rows.name_first_participant +', ' + rows.name_second_participant + ', ' + rows.name_third_party} + + + { flatten(rows.class) } + + + ) )} + + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702145801.tsx b/.history/components/LoadingTeamsForm_20220702145801.tsx new file mode 100644 index 0000000..3f04b7c --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702145801.tsx @@ -0,0 +1,57 @@ +import { tr } from 'date-fns/locale'; +import React from 'react'; + +type UserProps = { + id: number; + team_name: string; + name_team_coach: string; + training_institution_team: string; + name_first_participant: string; + name_second_participant: string; + name_third_party: string; + class: string[]; +}; + +export const LoadingTeamsForm : React.FC = ({ + team_name, + name_team_coach, + training_institution_team, + name_first_participant, + name_second_participant, + name_third_party, + class +}) => { + + + const flatten = (arr) => { + const arrOfNum = []; + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + return Math.min(...arrOfNum); + } + + return ( + + + + {team_name} + + + {name_team_coach} + + + {training_institution_team} + + + {name_first_participant +', ' + name_second_participant + ', ' + name_third_party} + + + { flatten(class)} + + + + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702145830.tsx b/.history/components/LoadingTeamsForm_20220702145830.tsx new file mode 100644 index 0000000..ff1f80c --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702145830.tsx @@ -0,0 +1,57 @@ +import { tr } from 'date-fns/locale'; +import React from 'react'; + +type UserProps = { + id: number; + team_name: string; + name_team_coach: string; + training_institution_team: string; + name_first_participant: string; + name_second_participant: string; + name_third_party: string; + classTeam: string[]; +}; + +export const LoadingTeamsForm : React.FC = ({ + team_name, + name_team_coach, + training_institution_team, + name_first_participant, + name_second_participant, + name_third_party, + classTeam +}) => { + + + const flatten = (arr) => { + const arrOfNum = []; + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + return Math.min(...arrOfNum); + } + + return ( + + + + {team_name} + + + {name_team_coach} + + + {training_institution_team} + + + {name_first_participant +', ' + name_second_participant + ', ' + name_third_party} + + + { flatten(classTeam)} + + + + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702145902.tsx b/.history/components/LoadingTeamsForm_20220702145902.tsx new file mode 100644 index 0000000..5be5351 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702145902.tsx @@ -0,0 +1,56 @@ +import { tr } from 'date-fns/locale'; +import React from 'react'; + +type UserProps = { + team_name: string; + name_team_coach: string; + training_institution_team: string; + name_first_participant: string; + name_second_participant: string; + name_third_party: string; + classTeam: string[]; +}; + +export const LoadingTeamsForm : React.FC = ({ + team_name, + name_team_coach, + training_institution_team, + name_first_participant, + name_second_participant, + name_third_party, + classTeam +}) => { + + + const flatten = (arr) => { + const arrOfNum = []; + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + return Math.min(...arrOfNum); + } + + return ( + + + + {team_name} + + + {name_team_coach} + + + {training_institution_team} + + + {name_first_participant +', ' + name_second_participant + ', ' + name_third_party} + + + { flatten(classTeam)} + + + + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702150136.tsx b/.history/components/LoadingTeamsForm_20220702150136.tsx new file mode 100644 index 0000000..6ae3cff --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702150136.tsx @@ -0,0 +1,56 @@ +import { tr } from 'date-fns/locale'; +import React from 'react'; + +type UserProps = { + team_name: string; + name_team_coach: string; + training_institution_team: string; + name_first_participant: string; + name_second_participant: string; + name_third_party: string; + classTeam: string[]; +}; + +export const LoadingTeamsForm : React.FC = ({ + team_name, + name_team_coach, + training_institution_team, + name_first_participant, + name_second_participant, + name_third_party, + classTeam +}) => { + + + const flatten = (arr) => { + const arrOfNum = []; + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + return Math.min(...arrOfNum); + } + + return ( + + + + {team_name} + + + {name_team_coach} + + + {training_institution_team} + + + {name_first_participant +', ' + name_second_participant + ', ' + name_third_party} + + + + + + + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702150309.tsx b/.history/components/LoadingTeamsForm_20220702150309.tsx new file mode 100644 index 0000000..24055b7 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702150309.tsx @@ -0,0 +1,54 @@ +import { tr } from 'date-fns/locale'; +import React from 'react'; + +type UserProps = { + team_name: string; + name_team_coach: string; + training_institution_team: string; + name_first_participant: string; + name_second_participant: string; + name_third_party: string; + classTeam: string[]; +}; + +export const LoadingTeamsForm : React.FC = ({ + team_name, + name_team_coach, + training_institution_team, + name_first_participant, + name_second_participant, + name_third_party, + classTeam +}) => { + + + const flatten = (arr) => { + const arrOfNum = []; + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + return Math.min(...arrOfNum); + } + + return ( + + + {team_name} + + + {name_team_coach} + + + {training_institution_team} + + + {name_first_participant +', ' + name_second_participant + ', ' + name_third_party} + + + { flatten(classTeam)} + + + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702150327.tsx b/.history/components/LoadingTeamsForm_20220702150327.tsx new file mode 100644 index 0000000..d7e34de --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702150327.tsx @@ -0,0 +1,54 @@ +import { tr } from 'date-fns/locale'; +import React from 'react'; + +type UserProps = { + team_name: string; + name_team_coach: string; + training_institution_team: string; + name_first_participant: string; + name_second_participant: string; + name_third_party: string; + classTeam: string; +}; + +export const LoadingTeamsForm : React.FC = ({ + team_name, + name_team_coach, + training_institution_team, + name_first_participant, + name_second_participant, + name_third_party, + classTeam +}) => { + + + const flatten = (arr) => { + const arrOfNum = []; + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + return Math.min(...arrOfNum); + } + + return ( + + + {team_name} + + + {name_team_coach} + + + {training_institution_team} + + + {name_first_participant +', ' + name_second_participant + ', ' + name_third_party} + + + { flatten(classTeam)} + + + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702150349.tsx b/.history/components/LoadingTeamsForm_20220702150349.tsx new file mode 100644 index 0000000..67231a9 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702150349.tsx @@ -0,0 +1,54 @@ +import { tr } from 'date-fns/locale'; +import React from 'react'; + +type UserProps = { + team_name: string; + name_team_coach: string; + training_institution_team: string; + name_first_participant: string; + name_second_participant: string; + name_third_party: string; + classTeam: string; +}; + +export const LoadingTeamsForm : React.FC = ({ + team_name, + name_team_coach, + training_institution_team, + name_first_participant, + name_second_participant, + name_third_party, + classTeam +}) => { + +console.log('dd'); + const flatten = (arr) => { + const arrOfNum = []; + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + return Math.min(...arrOfNum); + } + + return ( + + + {team_name} + + + {name_team_coach} + + + {training_institution_team} + + + {name_first_participant +', ' + name_second_participant + ', ' + name_third_party} + + + { flatten(classTeam)} + + + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702150404.tsx b/.history/components/LoadingTeamsForm_20220702150404.tsx new file mode 100644 index 0000000..b344698 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702150404.tsx @@ -0,0 +1,56 @@ +import { tr } from 'date-fns/locale'; +import React from 'react'; + +console.log('dd'); + +type UserProps = { + team_name: string; + name_team_coach: string; + training_institution_team: string; + name_first_participant: string; + name_second_participant: string; + name_third_party: string; + classTeam: string; +}; + +export const LoadingTeamsForm : React.FC = ({ + team_name, + name_team_coach, + training_institution_team, + name_first_participant, + name_second_participant, + name_third_party, + classTeam +}) => { + + + const flatten = (arr) => { + const arrOfNum = []; + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + return Math.min(...arrOfNum); + } + + return ( + + + {team_name} + + + {name_team_coach} + + + {training_institution_team} + + + {name_first_participant +', ' + name_second_participant + ', ' + name_third_party} + + + { flatten(classTeam)} + + + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702150453.tsx b/.history/components/LoadingTeamsForm_20220702150453.tsx new file mode 100644 index 0000000..fad85d0 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702150453.tsx @@ -0,0 +1,49 @@ +import { tr } from 'date-fns/locale'; +import React from 'react'; + +console.log('dd'); + +type UserProps = { + team_name: string; + name_team_coach: string; + training_institution_team: string; + name_first_participant: string; + name_second_participant: string; + name_third_party: string; + classTeam: string; +}; + +export const LoadingTeamsForm : React.FC = ({ + team_name, + name_team_coach, + training_institution_team, + name_first_participant, + name_second_participant, + name_third_party, + classTeam +}) => { + + + + return ( + + + {team_name} + + + {name_team_coach} + + + {training_institution_team} + + + {name_first_participant +', ' + name_second_participant + ', ' + name_third_party} + + + + + + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702150510.tsx b/.history/components/LoadingTeamsForm_20220702150510.tsx new file mode 100644 index 0000000..3da2e13 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702150510.tsx @@ -0,0 +1,39 @@ +import { tr } from 'date-fns/locale'; +import React from 'react'; + +console.log('dd'); + +type UserProps = { + team_name: string; + name_team_coach: string; + training_institution_team: string; + name_first_participant: string; + name_second_participant: string; + name_third_party: string; + classTeam: string; +}; + +export const LoadingTeamsForm : React.FC = ({ + team_name, + name_team_coach, + training_institution_team, + name_first_participant, + name_second_participant, + name_third_party, + classTeam +}) => { + + const flatten = (arr) => { + const arrOfNum = []; + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + return Math.min(...arrOfNum); + } + + return ( + <>dd + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702150635.tsx b/.history/components/LoadingTeamsForm_20220702150635.tsx new file mode 100644 index 0000000..ca06df7 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702150635.tsx @@ -0,0 +1,55 @@ +import { tr } from 'date-fns/locale'; +import React from 'react'; + +console.log('dd'); + +type UserProps = { + team_name: string; + name_team_coach: string; + training_institution_team: string; + name_first_participant: string; + name_second_participant: string; + name_third_party: string; + classTeam: string[]; +}; + +export const LoadingTeamsForm : React.FC = ({ + team_name, + name_team_coach, + training_institution_team, + name_first_participant, + name_second_participant, + name_third_party, + classTeam +}) => { + + const flatten = (arr) => { + const arrOfNum = []; + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + return Math.min(...arrOfNum); + } + + return ( + + + {team_name} + + + {name_team_coach} + + + {training_institution_team} + + + {name_first_participant +', ' + name_second_participant + ', ' + name_third_party} + + + { flatten(classTeam)} + + + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702183200.tsx b/.history/components/LoadingTeamsForm_20220702183200.tsx new file mode 100644 index 0000000..9566a65 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702183200.tsx @@ -0,0 +1,56 @@ +import { tr } from 'date-fns/locale'; +import React from 'react'; + +console.log('dd'); + +type UserProps = { + team_name: string; + name_team_coach: string; + training_institution_team: string; + name_first_participant: string; + name_second_participant: string; + name_third_party: string; + classTeam: string[]; +}; + +export const LoadingTeamsForm : React.FC = ({ + team_name, + name_team_coach, + training_institution_team, + name_first_participant, + name_second_participant, + name_third_party, + classTeam +}) => { + + const flatten = (arr) => { + const arrOfNum = []; + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + + return Math.min.apply(null, arrOfNum.filter(Boolean)); //Math.min(...arrOfNum); + } + + return ( + + + {team_name} + + + {name_team_coach} + + + {training_institution_team} + + + {name_first_participant +', ' + name_second_participant + ', ' + name_third_party} + + + { flatten(classTeam)} + + + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/LoadingTeamsForm_20220702183545.tsx b/.history/components/LoadingTeamsForm_20220702183545.tsx new file mode 100644 index 0000000..7524412 --- /dev/null +++ b/.history/components/LoadingTeamsForm_20220702183545.tsx @@ -0,0 +1,53 @@ +import React from 'react'; + +type UserProps = { + team_name: string; + name_team_coach: string; + training_institution_team: string; + name_first_participant: string; + name_second_participant: string; + name_third_party: string; + classTeam: string[]; +}; + +export const LoadingTeamsForm : React.FC = ({ + team_name, + name_team_coach, + training_institution_team, + name_first_participant, + name_second_participant, + name_third_party, + classTeam +}) => { + + const flatten = (arr) => { + const arrOfNum = []; + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + + return Math.min.apply(null, arrOfNum.filter(Boolean)); //Math.min(...arrOfNum); + } + + return ( + + + {team_name} + + + {name_team_coach} + + + {training_institution_team} + + + {name_first_participant +', ' + name_second_participant + ', ' + name_third_party} + + + { flatten(classTeam)} + + + ); +}; + +export default LoadingTeamsForm; diff --git a/.history/components/Navigation_20210629061557.tsx b/.history/components/Navigation_20210629061557.tsx new file mode 100644 index 0000000..c4c0684 --- /dev/null +++ b/.history/components/Navigation_20210629061557.tsx @@ -0,0 +1,17 @@ +import Link from 'next/link'; +import React from 'react'; + +const Navigation = (): JSX.Element => { + return ( + + ); +}; + +export default Navigation; diff --git a/.history/components/Navigation_20220611153643.tsx b/.history/components/Navigation_20220611153643.tsx new file mode 100644 index 0000000..ef88a31 --- /dev/null +++ b/.history/components/Navigation_20220611153643.tsx @@ -0,0 +1,17 @@ +import Link from 'next/link'; +import React from 'react'; + +const Navigation = (): JSX.Element => { + return ( + + ); +}; + +export default Navigation; diff --git a/.history/components/Navigation_20220611153716.tsx b/.history/components/Navigation_20220611153716.tsx new file mode 100644 index 0000000..ef88a31 --- /dev/null +++ b/.history/components/Navigation_20220611153716.tsx @@ -0,0 +1,17 @@ +import Link from 'next/link'; +import React from 'react'; + +const Navigation = (): JSX.Element => { + return ( + + ); +}; + +export default Navigation; diff --git a/.history/components/Navigation_20220611153756.tsx b/.history/components/Navigation_20220611153756.tsx new file mode 100644 index 0000000..4b061a8 --- /dev/null +++ b/.history/components/Navigation_20220611153756.tsx @@ -0,0 +1,18 @@ +import Link from 'next/link'; +import React from 'react'; + +const Navigation = (): JSX.Element => { + return ( + + ); +}; + +export default Navigation; diff --git a/.history/components/Navigation_20220611184326.tsx b/.history/components/Navigation_20220611184326.tsx new file mode 100644 index 0000000..8b418b6 --- /dev/null +++ b/.history/components/Navigation_20220611184326.tsx @@ -0,0 +1,24 @@ +import Link from 'next/link'; +import React from 'react'; + +const Navigation = (): JSX.Element => { + return ( + + ); +}; + +export default Navigation; diff --git a/.history/components/Navigation_20220613101121.tsx b/.history/components/Navigation_20220613101121.tsx new file mode 100644 index 0000000..b7ca696 --- /dev/null +++ b/.history/components/Navigation_20220613101121.tsx @@ -0,0 +1,24 @@ +import Link from 'next/link'; +import React from 'react'; + +const Navigation = (): JSX.Element => { + return ( + + ); +}; + +export default Navigation; diff --git a/.history/components/Navigation_20220613101153.tsx b/.history/components/Navigation_20220613101153.tsx new file mode 100644 index 0000000..c6eae75 --- /dev/null +++ b/.history/components/Navigation_20220613101153.tsx @@ -0,0 +1,24 @@ +import Link from 'next/link'; +import React from 'react'; + +const Navigation = (): JSX.Element => { + return ( + + ); +}; + +export default Navigation; diff --git a/.history/components/Navigation_20220613101208.tsx b/.history/components/Navigation_20220613101208.tsx new file mode 100644 index 0000000..d3a7d56 --- /dev/null +++ b/.history/components/Navigation_20220613101208.tsx @@ -0,0 +1,27 @@ +import Link from 'next/link'; +import React from 'react'; + +const Navigation = (): JSX.Element => { + return ( + + ); +}; + +export default Navigation; diff --git a/.history/components/Navigation_20220613103932.tsx b/.history/components/Navigation_20220613103932.tsx new file mode 100644 index 0000000..13718e9 --- /dev/null +++ b/.history/components/Navigation_20220613103932.tsx @@ -0,0 +1,27 @@ +import Link from 'next/link'; +import React from 'react'; + +const Navigation = (): JSX.Element => { + return ( + + ); +}; + +export default Navigation; diff --git a/.history/components/Navigation_20220613105237.tsx b/.history/components/Navigation_20220613105237.tsx new file mode 100644 index 0000000..d3a5a81 --- /dev/null +++ b/.history/components/Navigation_20220613105237.tsx @@ -0,0 +1,27 @@ +import Link from 'next/link'; +import React from 'react'; + +const Navigation = (): JSX.Element => { + return ( + + ); +}; + +export default Navigation; diff --git a/.history/components/Navigation_20220702140444.tsx b/.history/components/Navigation_20220702140444.tsx new file mode 100644 index 0000000..3e41571 --- /dev/null +++ b/.history/components/Navigation_20220702140444.tsx @@ -0,0 +1,30 @@ +import Link from 'next/link'; +import React from 'react'; + +const Navigation = (): JSX.Element => { + return ( + + ); +}; + +export default Navigation; diff --git a/.history/components/Navigation_20220702140458.tsx b/.history/components/Navigation_20220702140458.tsx new file mode 100644 index 0000000..813764d --- /dev/null +++ b/.history/components/Navigation_20220702140458.tsx @@ -0,0 +1,30 @@ +import Link from 'next/link'; +import React from 'react'; + +const Navigation = (): JSX.Element => { + return ( + + ); +}; + +export default Navigation; diff --git a/.history/components/Navigation_20220702140657.tsx b/.history/components/Navigation_20220702140657.tsx new file mode 100644 index 0000000..0870d7e --- /dev/null +++ b/.history/components/Navigation_20220702140657.tsx @@ -0,0 +1,30 @@ +import Link from 'next/link'; +import React from 'react'; + +const Navigation = (): JSX.Element => { + return ( + + ); +}; + +export default Navigation; diff --git a/.history/components/RegistrationForm_20220701201834.tsx b/.history/components/RegistrationForm_20220701201834.tsx new file mode 100644 index 0000000..e69de29 diff --git a/.history/components/RegistrationForm_20220701201915.tsx b/.history/components/RegistrationForm_20220701201915.tsx new file mode 100644 index 0000000..96abe59 --- /dev/null +++ b/.history/components/RegistrationForm_20220701201915.tsx @@ -0,0 +1,273 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const RegistrationForm = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + // .then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/components/RegistrationForm_20220701201951.tsx b/.history/components/RegistrationForm_20220701201951.tsx new file mode 100644 index 0000000..4e7c4e9 --- /dev/null +++ b/.history/components/RegistrationForm_20220701201951.tsx @@ -0,0 +1,273 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const RegistrationForm = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + // .then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+
+
+ ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220701202158.tsx b/.history/components/RegistrationForm_20220701202158.tsx new file mode 100644 index 0000000..6c5c322 --- /dev/null +++ b/.history/components/RegistrationForm_20220701202158.tsx @@ -0,0 +1,267 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const RegistrationForm = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + // .then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220701202215.tsx b/.history/components/RegistrationForm_20220701202215.tsx new file mode 100644 index 0000000..bd171e4 --- /dev/null +++ b/.history/components/RegistrationForm_20220701202215.tsx @@ -0,0 +1,266 @@ +import React,{useRef} from 'react'; + +export const RegistrationForm = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + // .then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220701205005.tsx b/.history/components/RegistrationForm_20220701205005.tsx new file mode 100644 index 0000000..4f2c3ab --- /dev/null +++ b/.history/components/RegistrationForm_20220701205005.tsx @@ -0,0 +1,248 @@ +import React,{useRef} from 'react'; + +export const RegistrationForm = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + // .then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220701205034.tsx b/.history/components/RegistrationForm_20220701205034.tsx new file mode 100644 index 0000000..636e1dd --- /dev/null +++ b/.history/components/RegistrationForm_20220701205034.tsx @@ -0,0 +1,242 @@ +import React,{useRef} from 'react'; + +export const RegistrationForm = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + // .then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702133503.tsx b/.history/components/RegistrationForm_20220702133503.tsx new file mode 100644 index 0000000..d9ff5b7 --- /dev/null +++ b/.history/components/RegistrationForm_20220702133503.tsx @@ -0,0 +1,242 @@ +import React,{useRef} from 'react'; + +export const RegistrationForm = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + // .then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702133650.tsx b/.history/components/RegistrationForm_20220702133650.tsx new file mode 100644 index 0000000..9365725 --- /dev/null +++ b/.history/components/RegistrationForm_20220702133650.tsx @@ -0,0 +1,243 @@ +import React,{useRef} from 'react'; + +export const RegistrationForm = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + // .then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702134244.tsx b/.history/components/RegistrationForm_20220702134244.tsx new file mode 100644 index 0000000..9365725 --- /dev/null +++ b/.history/components/RegistrationForm_20220702134244.tsx @@ -0,0 +1,243 @@ +import React,{useRef} from 'react'; + +export const RegistrationForm = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + // .then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702151051.tsx b/.history/components/RegistrationForm_20220702151051.tsx new file mode 100644 index 0000000..e7c7f5a --- /dev/null +++ b/.history/components/RegistrationForm_20220702151051.tsx @@ -0,0 +1,242 @@ +import React,{useRef} from 'react'; + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2)) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702151607.tsx b/.history/components/RegistrationForm_20220702151607.tsx new file mode 100644 index 0000000..fc3f6d0 --- /dev/null +++ b/.history/components/RegistrationForm_20220702151607.tsx @@ -0,0 +1,242 @@ +import React,{useRef} from 'react'; + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702154624.tsx b/.history/components/RegistrationForm_20220702154624.tsx new file mode 100644 index 0000000..88dd448 --- /dev/null +++ b/.history/components/RegistrationForm_20220702154624.tsx @@ -0,0 +1,259 @@ +import React,{useRef} from 'react'; +import { confirmAlert } from 'react-confirm-alert'; // Import +import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + + confirmAlert({ + title: 'Confirm to submit', + message: 'Are you sure to do this.', + buttons: [ + { + label: 'Yes', + onClick: () => alert('Click Yes') + }, + { + label: 'No', + onClick: () => alert('Click No') + } + ] + }); + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702154726.tsx b/.history/components/RegistrationForm_20220702154726.tsx new file mode 100644 index 0000000..2d3a573 --- /dev/null +++ b/.history/components/RegistrationForm_20220702154726.tsx @@ -0,0 +1,244 @@ +import React,{useRef} from 'react'; +import { confirmAlert } from 'react-confirm-alert'; // Import +import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702154744.tsx b/.history/components/RegistrationForm_20220702154744.tsx new file mode 100644 index 0000000..fc3f6d0 --- /dev/null +++ b/.history/components/RegistrationForm_20220702154744.tsx @@ -0,0 +1,242 @@ +import React,{useRef} from 'react'; + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702161203.tsx b/.history/components/RegistrationForm_20220702161203.tsx new file mode 100644 index 0000000..42dc62f --- /dev/null +++ b/.history/components/RegistrationForm_20220702161203.tsx @@ -0,0 +1,248 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + +type Inputs = { + example: string, + exampleRequired: string, +}; + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702163858.tsx b/.history/components/RegistrationForm_20220702163858.tsx new file mode 100644 index 0000000..fcf838a --- /dev/null +++ b/.history/components/RegistrationForm_20220702163858.tsx @@ -0,0 +1,251 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +type Inputs = { + example: string, + exampleRequired: string, +}; + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702164132.tsx b/.history/components/RegistrationForm_20220702164132.tsx new file mode 100644 index 0000000..931094a --- /dev/null +++ b/.history/components/RegistrationForm_20220702164132.tsx @@ -0,0 +1,251 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +type Inputs = { + example: string, + exampleRequired: string, +}; + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702164916.tsx b/.history/components/RegistrationForm_20220702164916.tsx new file mode 100644 index 0000000..c7c5312 --- /dev/null +++ b/.history/components/RegistrationForm_20220702164916.tsx @@ -0,0 +1,252 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +type Inputs = { + example: string, + exampleRequired: string, +}; + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + type="text" + name="trainer_mail" + id="email-address" + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702165215.tsx b/.history/components/RegistrationForm_20220702165215.tsx new file mode 100644 index 0000000..1f3bff4 --- /dev/null +++ b/.history/components/RegistrationForm_20220702165215.tsx @@ -0,0 +1,254 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +type Inputs = { + example: string, + exampleRequired: string, +}; + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + type="text" + name="trainer_mail" + id="email-address" + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.firstName &&

Please check the First Name

} +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702165307.tsx b/.history/components/RegistrationForm_20220702165307.tsx new file mode 100644 index 0000000..eb49e47 --- /dev/null +++ b/.history/components/RegistrationForm_20220702165307.tsx @@ -0,0 +1,251 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +type Inputs = { + example: string, + exampleRequired: string, +}; + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.firstName &&

Please check the First Name

} +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702165309.tsx b/.history/components/RegistrationForm_20220702165309.tsx new file mode 100644 index 0000000..49e6ea3 --- /dev/null +++ b/.history/components/RegistrationForm_20220702165309.tsx @@ -0,0 +1,251 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +type Inputs = { + example: string, + exampleRequired: string, +}; + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.firstName &&

Please check the First Name

} +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702165442.tsx b/.history/components/RegistrationForm_20220702165442.tsx new file mode 100644 index 0000000..7ef0459 --- /dev/null +++ b/.history/components/RegistrationForm_20220702165442.tsx @@ -0,0 +1,251 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +type Inputs = { + example: string, + exampleRequired: string, +}; + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.firstName && "First name is required"} +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702165451.tsx b/.history/components/RegistrationForm_20220702165451.tsx new file mode 100644 index 0000000..d4a3084 --- /dev/null +++ b/.history/components/RegistrationForm_20220702165451.tsx @@ -0,0 +1,251 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +type Inputs = { + example: string, + exampleRequired: string, +}; + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.name_team_coach && "First name is required"} +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702170033.tsx b/.history/components/RegistrationForm_20220702170033.tsx new file mode 100644 index 0000000..ef8b698 --- /dev/null +++ b/.history/components/RegistrationForm_20220702170033.tsx @@ -0,0 +1,253 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.name_team_coach && "First name is required"} +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702170301.tsx b/.history/components/RegistrationForm_20220702170301.tsx new file mode 100644 index 0000000..d99a4cb --- /dev/null +++ b/.history/components/RegistrationForm_20220702170301.tsx @@ -0,0 +1,252 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && "Введите ФИО тренера команды"} +
+ +
+ + +
+ +
+ + + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.name_team_coach && "First name is required"} +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702170410.tsx b/.history/components/RegistrationForm_20220702170410.tsx new file mode 100644 index 0000000..9c86178 --- /dev/null +++ b/.history/components/RegistrationForm_20220702170410.tsx @@ -0,0 +1,252 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && "Введите ФИО тренера команды"} +
+ +
+ + +
+ +
+ + + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && "First name is required"} +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702170854.tsx b/.history/components/RegistrationForm_20220702170854.tsx new file mode 100644 index 0000000..6c9e70f --- /dev/null +++ b/.history/components/RegistrationForm_20220702170854.tsx @@ -0,0 +1,252 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && "Введите ФИО тренера команды"} +
+ +
+ + + {errors.coach_telefon_number && "Введите коректный номер телефона"} +
+ +
+ + + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && "First name is required"} +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702171739.tsx b/.history/components/RegistrationForm_20220702171739.tsx new file mode 100644 index 0000000..bfb6d6e --- /dev/null +++ b/.history/components/RegistrationForm_20220702171739.tsx @@ -0,0 +1,253 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && "Введите ФИО тренера команды"} +
+ +
+ + + {errors.coach_telefon_number && "Введите коректный номер телефона"} +
+ +
+ + + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && "Введите коректный Email адресс"} +
+ +
+ + + {errors.city_team && "Введите город команда"} +
+ +
+ + + {errors.training_institution_team && "Введите название учебного заведения команды"} +
+ +
+ + + {errors.team_name && "Введите название команды"} +
+ +
+ + + {errors.name_first_participant && "Введите ФИО участника"} +
+ +
+ + +
+ +
+ + + {errors.name_second_participant && "Введите ФИО участника"} +
+ +
+ + +
+ +
+ + + {errors.name_third_party && "Введите ФИО участника"} +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702171856.tsx b/.history/components/RegistrationForm_20220702171856.tsx new file mode 100644 index 0000000..ae30398 --- /dev/null +++ b/.history/components/RegistrationForm_20220702171856.tsx @@ -0,0 +1,253 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && "Введите ФИО тренера команды"} +
+ +
+ + + {errors.coach_telefon_number && "Введите коректный номер телефона"} +
+ +
+ + + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && "Введите коректный Email адресс"} +
+ +
+ + + {errors.city_team && "Введите город команда"} +
+ +
+ + + {errors.training_institution_team && "Введите название учебного заведения команды"} +
+ +
+ + + {errors.team_name && "Введите название команды"} +
+ +
+ + + {errors.name_first_participant && "Введите ФИО участника"} +
+ +
+ + +
+ +
+ + + {errors.name_second_participant && "Введите ФИО участника"} +
+ +
+ + +
+ +
+ + + {errors.name_third_party && } +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702172021.tsx b/.history/components/RegistrationForm_20220702172021.tsx new file mode 100644 index 0000000..88b86b1 --- /dev/null +++ b/.history/components/RegistrationForm_20220702172021.tsx @@ -0,0 +1,258 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && "Введите ФИО тренера команды"} +
+ +
+ + + {errors.coach_telefon_number && "Введите коректный номер телефона"} +
+ +
+ + + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && "Введите коректный Email адресс"} +
+ +
+ + + {errors.city_team && "Введите город команда"} +
+ +
+ + + {errors.training_institution_team && "Введите название учебного заведения команды"} +
+ +
+ + + {errors.team_name && "Введите название команды"} +
+ +
+ + + {errors.name_first_participant && + + } +
+ +
+ + +
+ +
+ + + {errors.name_second_participant && + + } +
+ +
+ + +
+ +
+ + + {errors.name_third_party && + } +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702172234.tsx b/.history/components/RegistrationForm_20220702172234.tsx new file mode 100644 index 0000000..1fc4d74 --- /dev/null +++ b/.history/components/RegistrationForm_20220702172234.tsx @@ -0,0 +1,270 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && + + } +
+ +
+ + + {errors.coach_telefon_number && + + } +
+ +
+ + + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && + + } +
+ +
+ + + {errors.city_team && + + } +
+ +
+ + + {errors.training_institution_team && + + } +
+ +
+ + + {errors.team_name && + + } +
+ +
+ + + {errors.name_first_participant && + + } +
+ +
+ + +
+ +
+ + + {errors.name_second_participant && + + } +
+ +
+ + +
+ +
+ + + {errors.name_third_party && + } +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702173039.tsx b/.history/components/RegistrationForm_20220702173039.tsx new file mode 100644 index 0000000..5c1edcb --- /dev/null +++ b/.history/components/RegistrationForm_20220702173039.tsx @@ -0,0 +1,270 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && + + } +
+ +
+ + + {errors.coach_telefon_number && + + } +
+ +
+ + + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && + + } +
+ +
+ + + {errors.city_team && + + } +
+ +
+ + + {errors.training_institution_team && + + } +
+ +
+ + + {errors.team_name && + + } +
+ +
+ + + {errors.name_first_participant && + + } +
+ +
+ + +
+ +
+ + + {errors.name_second_participant && + + } +
+ +
+ + +
+ +
+ + + {errors.name_third_party && + } +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702173144.tsx b/.history/components/RegistrationForm_20220702173144.tsx new file mode 100644 index 0000000..a683770 --- /dev/null +++ b/.history/components/RegistrationForm_20220702173144.tsx @@ -0,0 +1,270 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && +

Введите ФИО тренера команды

+ } +
+ +
+ + + {errors.coach_telefon_number && + + } +
+ +
+ + + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && + + } +
+ +
+ + + {errors.city_team && + + } +
+ +
+ + + {errors.training_institution_team && + + } +
+ +
+ + + {errors.team_name && + + } +
+ +
+ + + {errors.name_first_participant && + + } +
+ +
+ + +
+ +
+ + + {errors.name_second_participant && + + } +
+ +
+ + +
+ +
+ + + {errors.name_third_party && + } +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702173342.tsx b/.history/components/RegistrationForm_20220702173342.tsx new file mode 100644 index 0000000..6f44e3e --- /dev/null +++ b/.history/components/RegistrationForm_20220702173342.tsx @@ -0,0 +1,272 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && + + } +
+ +
+ + + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && + + } +
+ +
+ + + {errors.city_team && + + } +
+ +
+ + + {errors.training_institution_team && + + } +
+ +
+ + + {errors.team_name && + + } +
+ +
+ + + {errors.name_first_participant && + + } +
+ +
+ + +
+ +
+ + + {errors.name_second_participant && + + } +
+ +
+ + +
+ +
+ + + {errors.name_third_party && + } +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702173545.tsx b/.history/components/RegistrationForm_20220702173545.tsx new file mode 100644 index 0000000..8f4e6ec --- /dev/null +++ b/.history/components/RegistrationForm_20220702173545.tsx @@ -0,0 +1,267 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команда') } +
+ +
+ + + {errors.training_institution_team && + + } +
+ +
+ + + {errors.team_name && + + } +
+ +
+ + + {errors.name_first_participant && + + } +
+ +
+ + +
+ +
+ + + {errors.name_second_participant && + + } +
+ +
+ + +
+ +
+ + + {errors.name_third_party && + } +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702173621.tsx b/.history/components/RegistrationForm_20220702173621.tsx new file mode 100644 index 0000000..92ba66b --- /dev/null +++ b/.history/components/RegistrationForm_20220702173621.tsx @@ -0,0 +1,265 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && + + } +
+ +
+ + + {errors.name_first_participant && + + } +
+ +
+ + +
+ +
+ + + {errors.name_second_participant && + + } +
+ +
+ + +
+ +
+ + + {errors.name_third_party && + } +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702173704.tsx b/.history/components/RegistrationForm_20220702173704.tsx new file mode 100644 index 0000000..bdb4473 --- /dev/null +++ b/.history/components/RegistrationForm_20220702173704.tsx @@ -0,0 +1,261 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + + {errors.name_second_participant && + + } +
+ +
+ + +
+ +
+ + + {errors.name_third_party && + } +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702173848.tsx b/.history/components/RegistrationForm_20220702173848.tsx new file mode 100644 index 0000000..23c48c6 --- /dev/null +++ b/.history/components/RegistrationForm_20220702173848.tsx @@ -0,0 +1,256 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702174101.tsx b/.history/components/RegistrationForm_20220702174101.tsx new file mode 100644 index 0000000..d0e6cb8 --- /dev/null +++ b/.history/components/RegistrationForm_20220702174101.tsx @@ -0,0 +1,255 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702174134.tsx b/.history/components/RegistrationForm_20220702174134.tsx new file mode 100644 index 0000000..d0e6cb8 --- /dev/null +++ b/.history/components/RegistrationForm_20220702174134.tsx @@ -0,0 +1,255 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702174159.tsx b/.history/components/RegistrationForm_20220702174159.tsx new file mode 100644 index 0000000..3c737ad --- /dev/null +++ b/.history/components/RegistrationForm_20220702174159.tsx @@ -0,0 +1,255 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702174206.tsx b/.history/components/RegistrationForm_20220702174206.tsx new file mode 100644 index 0000000..cedeb43 --- /dev/null +++ b/.history/components/RegistrationForm_20220702174206.tsx @@ -0,0 +1,255 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702174607.tsx b/.history/components/RegistrationForm_20220702174607.tsx new file mode 100644 index 0000000..cedeb43 --- /dev/null +++ b/.history/components/RegistrationForm_20220702174607.tsx @@ -0,0 +1,255 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702174641.tsx b/.history/components/RegistrationForm_20220702174641.tsx new file mode 100644 index 0000000..48a708b --- /dev/null +++ b/.history/components/RegistrationForm_20220702174641.tsx @@ -0,0 +1,256 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702174703.tsx b/.history/components/RegistrationForm_20220702174703.tsx new file mode 100644 index 0000000..84f16d4 --- /dev/null +++ b/.history/components/RegistrationForm_20220702174703.tsx @@ -0,0 +1,256 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702174714.tsx b/.history/components/RegistrationForm_20220702174714.tsx new file mode 100644 index 0000000..48a708b --- /dev/null +++ b/.history/components/RegistrationForm_20220702174714.tsx @@ -0,0 +1,256 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702174831.tsx b/.history/components/RegistrationForm_20220702174831.tsx new file mode 100644 index 0000000..47a16c9 --- /dev/null +++ b/.history/components/RegistrationForm_20220702174831.tsx @@ -0,0 +1,256 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702174844.tsx b/.history/components/RegistrationForm_20220702174844.tsx new file mode 100644 index 0000000..93cf3a5 --- /dev/null +++ b/.history/components/RegistrationForm_20220702174844.tsx @@ -0,0 +1,256 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702174919.tsx b/.history/components/RegistrationForm_20220702174919.tsx new file mode 100644 index 0000000..aa5e6e7 --- /dev/null +++ b/.history/components/RegistrationForm_20220702174919.tsx @@ -0,0 +1,259 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + +const onSubmit: SubmitHandler = data => { + console.log(data); +} + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702175109.tsx b/.history/components/RegistrationForm_20220702175109.tsx new file mode 100644 index 0000000..7b025d5 --- /dev/null +++ b/.history/components/RegistrationForm_20220702175109.tsx @@ -0,0 +1,249 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + +const onSubmit: SubmitHandler = data => { + console.log(data); +} + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702175118.tsx b/.history/components/RegistrationForm_20220702175118.tsx new file mode 100644 index 0000000..21f4b74 --- /dev/null +++ b/.history/components/RegistrationForm_20220702175118.tsx @@ -0,0 +1,249 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + +const onSubmit: SubmitHandler = data => { + console.log(data.value); +} + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702175127.tsx b/.history/components/RegistrationForm_20220702175127.tsx new file mode 100644 index 0000000..3d1b4f9 --- /dev/null +++ b/.history/components/RegistrationForm_20220702175127.tsx @@ -0,0 +1,249 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + +const onSubmit: SubmitHandler = data => { + console.log(data[1].value); +} + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702175137.tsx b/.history/components/RegistrationForm_20220702175137.tsx new file mode 100644 index 0000000..ff27158 --- /dev/null +++ b/.history/components/RegistrationForm_20220702175137.tsx @@ -0,0 +1,249 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + +const onSubmit: SubmitHandler = data => { + console.log(data[1]); +} + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702175144.tsx b/.history/components/RegistrationForm_20220702175144.tsx new file mode 100644 index 0000000..7b025d5 --- /dev/null +++ b/.history/components/RegistrationForm_20220702175144.tsx @@ -0,0 +1,249 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + +const onSubmit: SubmitHandler = data => { + console.log(data); +} + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702175158.tsx b/.history/components/RegistrationForm_20220702175158.tsx new file mode 100644 index 0000000..9e6d935 --- /dev/null +++ b/.history/components/RegistrationForm_20220702175158.tsx @@ -0,0 +1,249 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + +const onSubmit: SubmitHandler = data => { + console.log(data.name_team_coach); +} + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702175405.tsx b/.history/components/RegistrationForm_20220702175405.tsx new file mode 100644 index 0000000..1f2c85b --- /dev/null +++ b/.history/components/RegistrationForm_20220702175405.tsx @@ -0,0 +1,256 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const onSubmit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702175443.tsx b/.history/components/RegistrationForm_20220702175443.tsx new file mode 100644 index 0000000..312ea3d --- /dev/null +++ b/.history/components/RegistrationForm_20220702175443.tsx @@ -0,0 +1,256 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const onSubmit = e => { + const data =[]; + // e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702175523.tsx b/.history/components/RegistrationForm_20220702175523.tsx new file mode 100644 index 0000000..93cf3a5 --- /dev/null +++ b/.history/components/RegistrationForm_20220702175523.tsx @@ -0,0 +1,256 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + +const onSubmit: SubmitHandler = data => console.log(data); + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702175613.tsx b/.history/components/RegistrationForm_20220702175613.tsx new file mode 100644 index 0000000..7f370c0 --- /dev/null +++ b/.history/components/RegistrationForm_20220702175613.tsx @@ -0,0 +1,256 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + +const onSubmit: SubmitHandler = data => console.log(Object.values(data)); + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2), e.target.reset()) + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702175813.tsx b/.history/components/RegistrationForm_20220702175813.tsx new file mode 100644 index 0000000..66ea35d --- /dev/null +++ b/.history/components/RegistrationForm_20220702175813.tsx @@ -0,0 +1,262 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + console.log(Object.values(data)); + fetch('/api/registration', { method: 'POST', body: data }) + .then(props.updateData(2)) + } + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702175905.tsx b/.history/components/RegistrationForm_20220702175905.tsx new file mode 100644 index 0000000..90234fb --- /dev/null +++ b/.history/components/RegistrationForm_20220702175905.tsx @@ -0,0 +1,262 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + console.log(Object.values(data)); + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + } + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702180045.tsx b/.history/components/RegistrationForm_20220702180045.tsx new file mode 100644 index 0000000..c20ae90 --- /dev/null +++ b/.history/components/RegistrationForm_20220702180045.tsx @@ -0,0 +1,262 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + console.log(Object.values(data)); + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + } + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702180100.tsx b/.history/components/RegistrationForm_20220702180100.tsx new file mode 100644 index 0000000..7dd9dd1 --- /dev/null +++ b/.history/components/RegistrationForm_20220702180100.tsx @@ -0,0 +1,261 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + console.log(Object.values(data)); + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + } + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702180254.tsx b/.history/components/RegistrationForm_20220702180254.tsx new file mode 100644 index 0000000..4717dd6 --- /dev/null +++ b/.history/components/RegistrationForm_20220702180254.tsx @@ -0,0 +1,262 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + console.log(Object.values(data)); + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + } + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702180317.tsx b/.history/components/RegistrationForm_20220702180317.tsx new file mode 100644 index 0000000..4ff9401 --- /dev/null +++ b/.history/components/RegistrationForm_20220702180317.tsx @@ -0,0 +1,262 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + console.log(Object.values(data)); + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + } + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702180336.tsx b/.history/components/RegistrationForm_20220702180336.tsx new file mode 100644 index 0000000..a558373 --- /dev/null +++ b/.history/components/RegistrationForm_20220702180336.tsx @@ -0,0 +1,263 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + console.log(Object.values(data)); + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + } + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702180348.tsx b/.history/components/RegistrationForm_20220702180348.tsx new file mode 100644 index 0000000..baa5570 --- /dev/null +++ b/.history/components/RegistrationForm_20220702180348.tsx @@ -0,0 +1,263 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + console.log(Object.values(data)); + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + } + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702180808.tsx b/.history/components/RegistrationForm_20220702180808.tsx new file mode 100644 index 0000000..2f121b1 --- /dev/null +++ b/.history/components/RegistrationForm_20220702180808.tsx @@ -0,0 +1,260 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + console.log(Object.values(data)); + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + } + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702181935.tsx b/.history/components/RegistrationForm_20220702181935.tsx new file mode 100644 index 0000000..291b772 --- /dev/null +++ b/.history/components/RegistrationForm_20220702181935.tsx @@ -0,0 +1,261 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, reset, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + console.log(Object.values(data)); + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + reset({ something: '' }); + } + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702182041.tsx b/.history/components/RegistrationForm_20220702182041.tsx new file mode 100644 index 0000000..b2924d5 --- /dev/null +++ b/.history/components/RegistrationForm_20220702182041.tsx @@ -0,0 +1,261 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, reset, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + console.log(Object.values(data)); + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + reset({ name_team_coach: '' }); + } + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702182059.tsx b/.history/components/RegistrationForm_20220702182059.tsx new file mode 100644 index 0000000..b21c23c --- /dev/null +++ b/.history/components/RegistrationForm_20220702182059.tsx @@ -0,0 +1,261 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, reset, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + console.log(Object.values(data)); + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + reset(); + } + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702182233.tsx b/.history/components/RegistrationForm_20220702182233.tsx new file mode 100644 index 0000000..f440996 --- /dev/null +++ b/.history/components/RegistrationForm_20220702182233.tsx @@ -0,0 +1,262 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, reset, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + console.log(Object.values(data)); + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + reset(); + } + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702182244.tsx b/.history/components/RegistrationForm_20220702182244.tsx new file mode 100644 index 0000000..c637d71 --- /dev/null +++ b/.history/components/RegistrationForm_20220702182244.tsx @@ -0,0 +1,262 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, reset, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + console.log(Object.values(data)); + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + reset(); + } + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702182301.tsx b/.history/components/RegistrationForm_20220702182301.tsx new file mode 100644 index 0000000..9b57a46 --- /dev/null +++ b/.history/components/RegistrationForm_20220702182301.tsx @@ -0,0 +1,262 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, reset, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + console.log(Object.values(data)); + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + reset(); + } + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702182307.tsx b/.history/components/RegistrationForm_20220702182307.tsx new file mode 100644 index 0000000..cdf38ff --- /dev/null +++ b/.history/components/RegistrationForm_20220702182307.tsx @@ -0,0 +1,262 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, reset, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + console.log(Object.values(data)); + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + reset(); + } + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702182324.tsx b/.history/components/RegistrationForm_20220702182324.tsx new file mode 100644 index 0000000..cb7128c --- /dev/null +++ b/.history/components/RegistrationForm_20220702182324.tsx @@ -0,0 +1,262 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, reset, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + console.log(Object.values(data)); + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + reset(); + } + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702182349.tsx b/.history/components/RegistrationForm_20220702182349.tsx new file mode 100644 index 0000000..1a41561 --- /dev/null +++ b/.history/components/RegistrationForm_20220702182349.tsx @@ -0,0 +1,264 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, reset, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + console.log(Object.values(data)); + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + reset(); + } + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702182518.tsx b/.history/components/RegistrationForm_20220702182518.tsx new file mode 100644 index 0000000..c718aac --- /dev/null +++ b/.history/components/RegistrationForm_20220702182518.tsx @@ -0,0 +1,264 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, reset, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + console.log(Object.values(data)); + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + reset(); + } + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702182606.tsx b/.history/components/RegistrationForm_20220702182606.tsx new file mode 100644 index 0000000..96a7cc2 --- /dev/null +++ b/.history/components/RegistrationForm_20220702182606.tsx @@ -0,0 +1,264 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, reset, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + console.log(Object.values(data)); + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + reset(); + } + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + //console.log(data); + + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702183619.tsx b/.history/components/RegistrationForm_20220702183619.tsx new file mode 100644 index 0000000..b3cc74d --- /dev/null +++ b/.history/components/RegistrationForm_20220702183619.tsx @@ -0,0 +1,248 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, reset, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + reset(); + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702191647.tsx b/.history/components/RegistrationForm_20220702191647.tsx new file mode 100644 index 0000000..1bb7150 --- /dev/null +++ b/.history/components/RegistrationForm_20220702191647.tsx @@ -0,0 +1,249 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, reset, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + reset(); + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+ Подписывайтесь на наш Telegram канал, что бы быть в курсе новосте про соревнование. +
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702191747.tsx b/.history/components/RegistrationForm_20220702191747.tsx new file mode 100644 index 0000000..b49b47f --- /dev/null +++ b/.history/components/RegistrationForm_20220702191747.tsx @@ -0,0 +1,249 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, reset, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + reset(); + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+

Подписывайтесь на нашTelegram канал , что бы быть в курсе новосте про соревнование

. +
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702191751.tsx b/.history/components/RegistrationForm_20220702191751.tsx new file mode 100644 index 0000000..3d27594 --- /dev/null +++ b/.history/components/RegistrationForm_20220702191751.tsx @@ -0,0 +1,249 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, reset, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + reset(); + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+

Подписывайтесь на наш Telegram канал , что бы быть в курсе новосте про соревнование

. +
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/components/RegistrationForm_20220702191839.tsx b/.history/components/RegistrationForm_20220702191839.tsx new file mode 100644 index 0000000..05e6c54 --- /dev/null +++ b/.history/components/RegistrationForm_20220702191839.tsx @@ -0,0 +1,249 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, reset, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + reset(); + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+

Подписывайтесь на наш Telegram канал , что-бы быть в курсе новосте про соревнование

. +
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/.history/next.config_20220611185005.mjs b/.history/next.config_20220611185005.mjs new file mode 100644 index 0000000..e69de29 diff --git a/.history/next.config_20220611185014.mjs b/.history/next.config_20220611185014.mjs new file mode 100644 index 0000000..76b4d4d --- /dev/null +++ b/.history/next.config_20220611185014.mjs @@ -0,0 +1,17 @@ +import nextMDX from '@next/mdx' +import remarkGfm from 'remark-gfm' +import remarkParse from 'remark-parse' +import remarkRehype from 'remark-rehype' +import rehypeStringify from 'rehype-stringify' + +const withMDX = nextMDX({ + extension: /\.mdx?$/, + options: { + remarkPlugins: [remarkGfm, remarkParse, remarkRehype], + rehypePlugins: [rehypeStringify], + }, +}) + +export default withMDX({ + pageExtensions: ['js', 'jsx', 'ts', 'tsx', 'md', 'mdx'], +}) \ No newline at end of file diff --git a/.history/pages/_app_20210629061557.tsx b/.history/pages/_app_20210629061557.tsx new file mode 100644 index 0000000..098fd28 --- /dev/null +++ b/.history/pages/_app_20210629061557.tsx @@ -0,0 +1,14 @@ +import { ThemeProvider } from 'next-themes'; +import type { AppProps } from 'next/app'; +import React from 'react'; +import '../styles/globals.css'; + +const MyApp = ({ Component, pageProps }: AppProps): JSX.Element => { + return ( + + + + ); +}; + +export default MyApp; diff --git a/.history/pages/_app_20220702144949.tsx b/.history/pages/_app_20220702144949.tsx new file mode 100644 index 0000000..2805d3d --- /dev/null +++ b/.history/pages/_app_20220702144949.tsx @@ -0,0 +1,18 @@ +import { ThemeProvider } from 'next-themes'; +import type { AppProps } from 'next/app'; +import React from 'react'; +import { Provider } from 'react-redux'; +import '../styles/globals.css'; +import { store } from '../redux/store'; + +const MyApp = ({ Component, pageProps }: AppProps): JSX.Element => { + return ( + + + + + + ); +}; + +export default MyApp; diff --git a/.history/pages/about_20210629061557.tsx b/.history/pages/about_20210629061557.tsx new file mode 100644 index 0000000..a96b120 --- /dev/null +++ b/.history/pages/about_20210629061557.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const About = (): JSX.Element => { + return ( + +

About Page

+

Welcome to the about page

+
+ ); +}; + +export default About; diff --git a/.history/pages/about_20220611184210.tsx b/.history/pages/about_20220611184210.tsx new file mode 100644 index 0000000..10996a9 --- /dev/null +++ b/.history/pages/about_20220611184210.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const About = (): JSX.Element => { + return ( + +

RobotTop

+

Мы команда из 103 школы

+
+ ); +}; + +export default About; diff --git a/.history/pages/about_20220613104403.tsx b/.history/pages/about_20220613104403.tsx new file mode 100644 index 0000000..d8eaabf --- /dev/null +++ b/.history/pages/about_20220613104403.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const About = (): JSX.Element => { + return ( + +

РоботТоп

+

Мы команда школы 103

+
+ ); +}; + +export default About; diff --git a/.history/pages/api/loadingLegisteredCommands_20220614072118.ts b/.history/pages/api/loadingLegisteredCommands_20220614072118.ts new file mode 100644 index 0000000..e69de29 diff --git a/.history/pages/api/loadingLegisteredCommands_20220614072637.ts b/.history/pages/api/loadingLegisteredCommands_20220614072637.ts new file mode 100644 index 0000000..c148710 --- /dev/null +++ b/.history/pages/api/loadingLegisteredCommands_20220614072637.ts @@ -0,0 +1,9 @@ +import Select from "../../server/db/select"; + +const sql = "SELECT * FROM members WHERE 1"; + +export default function handler(req, res) { + Select(sql, function(data){ + res.status(200).json(data); + }) +} \ No newline at end of file diff --git a/.history/pages/api/loadingLegisteredCommands_20220701201424.ts b/.history/pages/api/loadingLegisteredCommands_20220701201424.ts new file mode 100644 index 0000000..8947597 --- /dev/null +++ b/.history/pages/api/loadingLegisteredCommands_20220701201424.ts @@ -0,0 +1,10 @@ +import Select from "../../server/db/select"; + +const sql = "SELECT * FROM members WHERE 1"; + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export default function handler(req, res) { + Select(sql, function(data){ + res.status(200).json(data); + }) +} \ No newline at end of file diff --git a/.history/pages/api/loadingLegisteredCommands_20220701201451.ts b/.history/pages/api/loadingLegisteredCommands_20220701201451.ts new file mode 100644 index 0000000..8947597 --- /dev/null +++ b/.history/pages/api/loadingLegisteredCommands_20220701201451.ts @@ -0,0 +1,10 @@ +import Select from "../../server/db/select"; + +const sql = "SELECT * FROM members WHERE 1"; + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export default function handler(req, res) { + Select(sql, function(data){ + res.status(200).json(data); + }) +} \ No newline at end of file diff --git a/.history/pages/api/loadingLegisteredCommands_20220701204606.ts b/.history/pages/api/loadingLegisteredCommands_20220701204606.ts new file mode 100644 index 0000000..d56df53 --- /dev/null +++ b/.history/pages/api/loadingLegisteredCommands_20220701204606.ts @@ -0,0 +1,10 @@ +import Select from "../../server/db/select"; + +const sql = "SELECT team_name, training_institution_team, name_team_coach, name_first_participant, name_second_participant, name_third_party FROM members WHERE 1"; + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export default function handler(req, res) { + Select(sql, function(data){ + res.status(200).json(data); + }) +} \ No newline at end of file diff --git a/.history/pages/api/loadingLegisteredCommands_20220701210724.ts b/.history/pages/api/loadingLegisteredCommands_20220701210724.ts new file mode 100644 index 0000000..c5ee35a --- /dev/null +++ b/.history/pages/api/loadingLegisteredCommands_20220701210724.ts @@ -0,0 +1,10 @@ +import Select from "../../server/db/select"; + +const sql = "SELECT team_name, training_institution_team, name_team_coach, name_first_participant, name_second_participant, name_third_party, concat(first_partial_class,',',second_class,',',third_part_class) as class FROM members WHERE 1"; + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export default function handler(req, res) { + Select(sql, function(data){ + res.status(200).json(data); + }) +} \ No newline at end of file diff --git a/.history/pages/api/loadingLegisteredCommands_20220701210731.ts b/.history/pages/api/loadingLegisteredCommands_20220701210731.ts new file mode 100644 index 0000000..c5ee35a --- /dev/null +++ b/.history/pages/api/loadingLegisteredCommands_20220701210731.ts @@ -0,0 +1,10 @@ +import Select from "../../server/db/select"; + +const sql = "SELECT team_name, training_institution_team, name_team_coach, name_first_participant, name_second_participant, name_third_party, concat(first_partial_class,',',second_class,',',third_part_class) as class FROM members WHERE 1"; + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export default function handler(req, res) { + Select(sql, function(data){ + res.status(200).json(data); + }) +} \ No newline at end of file diff --git a/.history/pages/api/loadingLegisteredCommands_20220702145958.ts b/.history/pages/api/loadingLegisteredCommands_20220702145958.ts new file mode 100644 index 0000000..7334297 --- /dev/null +++ b/.history/pages/api/loadingLegisteredCommands_20220702145958.ts @@ -0,0 +1,10 @@ +import Select from "../../server/db/select"; + +const sql = "SELECT team_name, training_institution_team, name_team_coach, name_first_participant, name_second_participant, name_third_party, concat(first_partial_class,',',second_class,',',third_part_class) as classTeam FROM members WHERE 1"; + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export default function handler(req, res) { + Select(sql, function(data){ + res.status(200).json(data); + }) +} \ No newline at end of file diff --git a/.history/pages/api/registration_20220613145412.ts b/.history/pages/api/registration_20220613145412.ts new file mode 100644 index 0000000..e69de29 diff --git a/.history/pages/api/registration_20220613145451.ts b/.history/pages/api/registration_20220613145451.ts new file mode 100644 index 0000000..d4d8d3d --- /dev/null +++ b/.history/pages/api/registration_20220613145451.ts @@ -0,0 +1,13 @@ +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction +import type { NextApiRequest, NextApiResponse } from 'next' + +type Data = { + error: string, +} + +export default function handler( + req: NextApiRequest, + res: NextApiResponse +) { + res.status(200).json({error:'John Doe' }) +} \ No newline at end of file diff --git a/.history/pages/api/registration_20220613145946.ts b/.history/pages/api/registration_20220613145946.ts new file mode 100644 index 0000000..af1ac16 --- /dev/null +++ b/.history/pages/api/registration_20220613145946.ts @@ -0,0 +1,14 @@ +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction +import type { NextApiRequest, NextApiResponse } from 'next' + +type DataRes = { + error: string, +} + +export default function handler( + req: NextApiRequest, + res: NextApiResponse +) { + res.status(200).json({error:'John Doe' }); + console.log(req); +} \ No newline at end of file diff --git a/.history/pages/api/registration_20220613150144.ts b/.history/pages/api/registration_20220613150144.ts new file mode 100644 index 0000000..23da1ba --- /dev/null +++ b/.history/pages/api/registration_20220613150144.ts @@ -0,0 +1,13 @@ +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction +import type { NextApiRequest, NextApiResponse } from 'next' + +type DataRes = { + error: string, +} + +export default function handler( + req: NextApiRequest, + res: NextApiResponse +) { + res.status(200).json({error:'John Doe' }); +} \ No newline at end of file diff --git a/.history/pages/api/registration_20220613150211.ts b/.history/pages/api/registration_20220613150211.ts new file mode 100644 index 0000000..a982091 --- /dev/null +++ b/.history/pages/api/registration_20220613150211.ts @@ -0,0 +1,14 @@ +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction +import type { NextApiRequest, NextApiResponse } from 'next' + +type DataRes = { + error: string, +} + +export default function handler( + req: NextApiRequest, + res: NextApiResponse +) { +console.log('dd'); + res.status(200).json({error:'John Doe' }); +} \ No newline at end of file diff --git a/.history/pages/api/registration_20220613150349.ts b/.history/pages/api/registration_20220613150349.ts new file mode 100644 index 0000000..3d1d618 --- /dev/null +++ b/.history/pages/api/registration_20220613150349.ts @@ -0,0 +1,14 @@ +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction +import type { NextApiRequest, NextApiResponse } from 'next' + +type DataRes = { + error: string, +} + +export default function handler( + req: NextApiRequest, + res: NextApiResponse +) { +console.log(req); + res.status(200).json({error:'John Doe' }); +} \ No newline at end of file diff --git a/.history/pages/api/registration_20220613150548.ts b/.history/pages/api/registration_20220613150548.ts new file mode 100644 index 0000000..393551d --- /dev/null +++ b/.history/pages/api/registration_20220613150548.ts @@ -0,0 +1,14 @@ +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction +import type { NextApiRequest, NextApiResponse } from 'next' + +type DataRes = { + error: string, +} + +export default function handler( + req: NextApiRequest, + res: NextApiResponse +) { +console.log(req.body); + res.status(200).json({error:'John Doe' }); +} \ No newline at end of file diff --git a/.history/pages/api/registration_20220613151741.ts b/.history/pages/api/registration_20220613151741.ts new file mode 100644 index 0000000..0c3a32b --- /dev/null +++ b/.history/pages/api/registration_20220613151741.ts @@ -0,0 +1,14 @@ +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction +import type { NextApiRequest, NextApiResponse } from 'next' + +type DataRes = { + error: string, +} + +export default function handler( + req: NextApiRequest, + res: NextApiResponse +) { +console.log(req.body); + res.status(200).json(req.body); +} \ No newline at end of file diff --git a/.history/pages/api/registration_20220613152209.ts b/.history/pages/api/registration_20220613152209.ts new file mode 100644 index 0000000..00e57c4 --- /dev/null +++ b/.history/pages/api/registration_20220613152209.ts @@ -0,0 +1,14 @@ +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction +// Yn*t1Si% +import type { NextApiRequest, NextApiResponse } from 'next' + +type DataRes = { + error: string, +} + +export default function handler( + req: NextApiRequest, + res: NextApiResponse +) { + res.status(200).json(req.body); +} \ No newline at end of file diff --git a/.history/pages/api/registration_20220613162635.ts b/.history/pages/api/registration_20220613162635.ts new file mode 100644 index 0000000..08249a7 --- /dev/null +++ b/.history/pages/api/registration_20220613162635.ts @@ -0,0 +1,15 @@ +// Загрузка категорий продукта +const pool = require("../../server/db/connect"); + +const queryString = "SELECT name, types FROM product_categories WHERE status=1"; + +export default function handler(req, res) { + pool.getConnection(function(err, conn) { + // Do something with the connection + conn.query(queryString , function(err, rows, fields) { + res.status(200).json(rows); + }); + // Don't forget to release the connection when finished! + pool.releaseConnection(conn); + }) +} \ No newline at end of file diff --git a/.history/pages/api/registration_20220613162651.ts b/.history/pages/api/registration_20220613162651.ts new file mode 100644 index 0000000..1015701 --- /dev/null +++ b/.history/pages/api/registration_20220613162651.ts @@ -0,0 +1,15 @@ +// Загрузка категорий продукта +const pool = require("../../server/db/connect"); + +const queryString = "SELECT name, types FROM product_categories WHERE status=1"; + +export default function handler(req, res) { + pool.getConnection(function(err, conn) { + // Do something with the connection + conn.query(queryString , function(err, rows) { + res.status(200).json(rows); + }); + // Don't forget to release the connection when finished! + pool.releaseConnection(conn); + }) +} \ No newline at end of file diff --git a/.history/pages/api/registration_20220613181810.ts b/.history/pages/api/registration_20220613181810.ts new file mode 100644 index 0000000..3034b49 --- /dev/null +++ b/.history/pages/api/registration_20220613181810.ts @@ -0,0 +1,10 @@ +// Загрузка категорий продукта +const select = require("../../server/db/select"); + +const sql = "SELECT name, types FROM product_categories WHERE status=1"; + +export default function handler(req, res) { + select(sql, function(data){ + res.status(200).json(data); + }) +} \ No newline at end of file diff --git a/.history/pages/api/registration_20220613182052.ts b/.history/pages/api/registration_20220613182052.ts new file mode 100644 index 0000000..341a936 --- /dev/null +++ b/.history/pages/api/registration_20220613182052.ts @@ -0,0 +1,10 @@ +// Загрузка категорий продукта +import Select from "../../server/db/select"; + +const sql = "SELECT name, types FROM product_categories WHERE status=1"; + +export default function handler(req, res) { + Select(sql, function(data){ + res.status(200).json(data); + }) +} \ No newline at end of file diff --git a/.history/pages/api/registration_20220613183749.ts b/.history/pages/api/registration_20220613183749.ts new file mode 100644 index 0000000..90582df --- /dev/null +++ b/.history/pages/api/registration_20220613183749.ts @@ -0,0 +1,10 @@ +// Загрузка категорий продукта +import Select from "../../server/db/select"; + +const sql = "SELECT * FROM `members` WHERE 1"; + +export default function handler(req, res) { + Select(sql, function(data){ + res.status(200).json(data); + }) +} \ No newline at end of file diff --git a/.history/pages/api/registration_20220613183803.ts b/.history/pages/api/registration_20220613183803.ts new file mode 100644 index 0000000..d0ccc81 --- /dev/null +++ b/.history/pages/api/registration_20220613183803.ts @@ -0,0 +1,11 @@ +// Загрузка категорий продукта +import Select from "../../server/db/select"; + +const sql = "SELECT * FROM `members` WHERE 1"; + +export default function handler(req, res) { + console.log(333); + Select(sql, function(data){ + res.status(200).json(data); + }) +} \ No newline at end of file diff --git a/.history/pages/api/registration_20220613183815.ts b/.history/pages/api/registration_20220613183815.ts new file mode 100644 index 0000000..0deef5f --- /dev/null +++ b/.history/pages/api/registration_20220613183815.ts @@ -0,0 +1,11 @@ +// Загрузка категорий продукта +import Select from "../../server/db/select"; + +const sql = "SELECT * FROM `members` WHERE 1"; + +export default function handler(req, res) { + Select(sql, function(data){ + res.status(200).json(data); + console.log(333); + }) +} \ No newline at end of file diff --git a/.history/pages/api/registration_20220613183822.ts b/.history/pages/api/registration_20220613183822.ts new file mode 100644 index 0000000..af1b215 --- /dev/null +++ b/.history/pages/api/registration_20220613183822.ts @@ -0,0 +1,11 @@ +// Загрузка категорий продукта +import Select from "../../server/db/select"; + +const sql = "SELECT * FROM `members` WHERE 1"; + +export default function handler(req, res) { + Select(sql, function(data){ + res.status(200).json(data); + console.log(data); + }) +} \ No newline at end of file diff --git a/.history/pages/api/registration_20220614071814.ts b/.history/pages/api/registration_20220614071814.ts new file mode 100644 index 0000000..78de689 --- /dev/null +++ b/.history/pages/api/registration_20220614071814.ts @@ -0,0 +1,10 @@ +// Загрузка категорий продукта +import Select from "../../server/db/select"; + +const sql = "SELECT * FROM members WHERE 1"; + +export default function handler(req, res) { + Select(sql, function(data){ + res.status(200).json(data); + }) +} \ No newline at end of file diff --git a/.history/pages/api/registration_20220614072547.ts b/.history/pages/api/registration_20220614072547.ts new file mode 100644 index 0000000..08222ec --- /dev/null +++ b/.history/pages/api/registration_20220614072547.ts @@ -0,0 +1,10 @@ +// Загрузка категорий продукта +import Select from "../../server/db/select"; + +const sql = "INSERT INTO members (name_team_coach, coach_telefon_number, trainer_mail, city_team, training_institution_team, team_name, name_first_participant, first_partial_class, name_second_participant, second_class, name_third_party, third_part_class) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + +export default function handler(req, res) { + Select(sql, function(data){ + res.status(200).json(data); + }) +} \ No newline at end of file diff --git a/.history/pages/api/registration_20220614073352.ts b/.history/pages/api/registration_20220614073352.ts new file mode 100644 index 0000000..539097b --- /dev/null +++ b/.history/pages/api/registration_20220614073352.ts @@ -0,0 +1,17 @@ +import type { NextApiRequest, NextApiResponse } from 'next' +import Select from "../../server/db/insert"; + +const sql = "INSERT INTO members (name_team_coach, coach_telefon_number, trainer_mail, city_team, training_institution_team, team_name, name_first_participant, first_partial_class, name_second_participant, second_class, name_third_party, third_part_class) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; +type Data = { + error: string, + } + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export default function handler( + req: NextApiRequest, + res: NextApiResponse + ) { + Select(sql, req.body, function(data){ + res.status(200).json(data); + }) + } \ No newline at end of file diff --git a/.history/pages/api/registration_20220614073503.ts b/.history/pages/api/registration_20220614073503.ts new file mode 100644 index 0000000..539097b --- /dev/null +++ b/.history/pages/api/registration_20220614073503.ts @@ -0,0 +1,17 @@ +import type { NextApiRequest, NextApiResponse } from 'next' +import Select from "../../server/db/insert"; + +const sql = "INSERT INTO members (name_team_coach, coach_telefon_number, trainer_mail, city_team, training_institution_team, team_name, name_first_participant, first_partial_class, name_second_participant, second_class, name_third_party, third_part_class) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; +type Data = { + error: string, + } + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export default function handler( + req: NextApiRequest, + res: NextApiResponse + ) { + Select(sql, req.body, function(data){ + res.status(200).json(data); + }) + } \ No newline at end of file diff --git a/.history/pages/api/registration_20220614073513.ts b/.history/pages/api/registration_20220614073513.ts new file mode 100644 index 0000000..b7b87fc --- /dev/null +++ b/.history/pages/api/registration_20220614073513.ts @@ -0,0 +1,17 @@ +import type { NextApiRequest, NextApiResponse } from 'next' +import Insert from "../../server/db/insert"; + +const sql = "INSERT INTO members (name_team_coach, coach_telefon_number, trainer_mail, city_team, training_institution_team, team_name, name_first_participant, first_partial_class, name_second_participant, second_class, name_third_party, third_part_class) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; +type Data = { + error: string, + } + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export default function handler( + req: NextApiRequest, + res: NextApiResponse + ) { + Insert(sql, req.body, function(data){ + res.status(200).json(data); + }) + } \ No newline at end of file diff --git a/.history/pages/api/registration_20220701195937.ts b/.history/pages/api/registration_20220701195937.ts new file mode 100644 index 0000000..b7b87fc --- /dev/null +++ b/.history/pages/api/registration_20220701195937.ts @@ -0,0 +1,17 @@ +import type { NextApiRequest, NextApiResponse } from 'next' +import Insert from "../../server/db/insert"; + +const sql = "INSERT INTO members (name_team_coach, coach_telefon_number, trainer_mail, city_team, training_institution_team, team_name, name_first_participant, first_partial_class, name_second_participant, second_class, name_third_party, third_part_class) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; +type Data = { + error: string, + } + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export default function handler( + req: NextApiRequest, + res: NextApiResponse + ) { + Insert(sql, req.body, function(data){ + res.status(200).json(data); + }) + } \ No newline at end of file diff --git a/.history/pages/api/registration_20220701200204.ts b/.history/pages/api/registration_20220701200204.ts new file mode 100644 index 0000000..3a05536 --- /dev/null +++ b/.history/pages/api/registration_20220701200204.ts @@ -0,0 +1,18 @@ +import type { NextApiRequest, NextApiResponse } from 'next' +import Insert from "../../server/db/insert"; + +const sql = "INSERT INTO members (name_team_coach, coach_telefon_number, trainer_mail, city_team, training_institution_team, team_name, name_first_participant, first_partial_class, name_second_participant, second_class, name_third_party, third_part_class) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; +type Data = { + error: string, + } + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export default function handler( + req: NextApiRequest, + res: NextApiResponse + ) { + console.log(req.body) + Insert(sql, req.body, function(data){ + res.status(200).json(data); + }) + } \ No newline at end of file diff --git a/.history/pages/api/registration_20220701200531.ts b/.history/pages/api/registration_20220701200531.ts new file mode 100644 index 0000000..3a05536 --- /dev/null +++ b/.history/pages/api/registration_20220701200531.ts @@ -0,0 +1,18 @@ +import type { NextApiRequest, NextApiResponse } from 'next' +import Insert from "../../server/db/insert"; + +const sql = "INSERT INTO members (name_team_coach, coach_telefon_number, trainer_mail, city_team, training_institution_team, team_name, name_first_participant, first_partial_class, name_second_participant, second_class, name_third_party, third_part_class) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; +type Data = { + error: string, + } + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export default function handler( + req: NextApiRequest, + res: NextApiResponse + ) { + console.log(req.body) + Insert(sql, req.body, function(data){ + res.status(200).json(data); + }) + } \ No newline at end of file diff --git a/.history/pages/api/registration_20220701200631.ts b/.history/pages/api/registration_20220701200631.ts new file mode 100644 index 0000000..6bc28ef --- /dev/null +++ b/.history/pages/api/registration_20220701200631.ts @@ -0,0 +1,19 @@ +import type { NextApiRequest, NextApiResponse } from 'next' +import Insert from "../../server/db/insert"; + +const sql = "INSERT INTO members (name_team_coach, coach_telefon_number, trainer_mail, city_team, training_institution_team, team_name, name_first_participant, first_partial_class, name_second_participant, second_class, name_third_party, third_part_class) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; +type Data = { + error: string, + } + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export default function handler( + req: NextApiRequest, + res: NextApiResponse + ) { + console.log(req.body) + const parm = [1,2,3,4,5,6,7,8,9,10,11,12] + Insert(sql, parm, function(data){ + res.status(200).json(data); + }) + } \ No newline at end of file diff --git a/.history/pages/api/registration_20220701200742.ts b/.history/pages/api/registration_20220701200742.ts new file mode 100644 index 0000000..8617fe8 --- /dev/null +++ b/.history/pages/api/registration_20220701200742.ts @@ -0,0 +1,19 @@ +import type { NextApiRequest, NextApiResponse } from 'next' +import Insert from "../../server/db/insert"; + +const sql = "INSERT INTO members (name_team_coach, coach_telefon_number, trainer_mail, city_team, training_institution_team, team_name, name_first_participant, first_partial_class, name_second_participant, second_class, name_third_party, third_part_class) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; +type Data = { + error: string, + } + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export default function handler( + req: NextApiRequest, + res: NextApiResponse + ) { + console.log(req.body) + const parm = req.body; + Insert(sql, parm, function(data){ + res.status(200).json(data); + }) + } \ No newline at end of file diff --git a/.history/pages/api/registration_20220701200809.ts b/.history/pages/api/registration_20220701200809.ts new file mode 100644 index 0000000..56799f8 --- /dev/null +++ b/.history/pages/api/registration_20220701200809.ts @@ -0,0 +1,19 @@ +import type { NextApiRequest, NextApiResponse } from 'next' +import Insert from "../../server/db/insert"; + +const sql = "INSERT INTO members (name_team_coach, coach_telefon_number, trainer_mail, city_team, training_institution_team, team_name, name_first_participant, first_partial_class, name_second_participant, second_class, name_third_party, third_part_class) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; +type Data = { + error: string, + } + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export default function handler( + req: NextApiRequest, + res: NextApiResponse + ) { + console.log(req.body) + const parm = [req.body]; + Insert(sql, parm, function(data){ + res.status(200).json(data); + }) + } \ No newline at end of file diff --git a/.history/pages/api/registration_20220701200848.ts b/.history/pages/api/registration_20220701200848.ts new file mode 100644 index 0000000..1089911 --- /dev/null +++ b/.history/pages/api/registration_20220701200848.ts @@ -0,0 +1,19 @@ +import type { NextApiRequest, NextApiResponse } from 'next' +import Insert from "../../server/db/insert"; + +const sql = "INSERT INTO members (name_team_coach, coach_telefon_number, trainer_mail, city_team, training_institution_team, team_name, name_first_participant, first_partial_class, name_second_participant, second_class, name_third_party, third_part_class) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; +type Data = { + error: string, + } + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export default function handler( + req: NextApiRequest, + res: NextApiResponse + ) { + console.log(req.body) + const parm = JSON.stringify(req.body); + Insert(sql, parm, function(data){ + res.status(200).json(data); + }) + } \ No newline at end of file diff --git a/.history/pages/api/registration_20220701201040.ts b/.history/pages/api/registration_20220701201040.ts new file mode 100644 index 0000000..495a2c0 --- /dev/null +++ b/.history/pages/api/registration_20220701201040.ts @@ -0,0 +1,19 @@ +import type { NextApiRequest, NextApiResponse } from 'next' +import Insert from "../../server/db/insert"; + +const sql = "INSERT INTO members (name_team_coach, coach_telefon_number, trainer_mail, city_team, training_institution_team, team_name, name_first_participant, first_partial_class, name_second_participant, second_class, name_third_party, third_part_class) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; +type Data = { + error: string, + } + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export default function handler( + req: NextApiRequest, + res: NextApiResponse + ) { + console.log(req.body) + const parm = req.body; + Insert(sql, parm.split, function(data){ + res.status(200).json(data); + }) + } \ No newline at end of file diff --git a/.history/pages/api/registration_20220701201137.ts b/.history/pages/api/registration_20220701201137.ts new file mode 100644 index 0000000..0100af4 --- /dev/null +++ b/.history/pages/api/registration_20220701201137.ts @@ -0,0 +1,20 @@ +import type { NextApiRequest, NextApiResponse } from 'next' +import Insert from "../../server/db/insert"; + +const sql = "INSERT INTO members (name_team_coach, coach_telefon_number, trainer_mail, city_team, training_institution_team, team_name, name_first_participant, first_partial_class, name_second_participant, second_class, name_third_party, third_part_class) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; +type Data = { + error: string, + } + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export default function handler( + req: NextApiRequest, + res: NextApiResponse + ) { + console.log(req.body) + var re = /\s*,\s*/; + const parm = req.body; + Insert(sql, parm.split(re), function(data){ + res.status(200).json(data); + }) + } \ No newline at end of file diff --git a/.history/pages/api/registration_20220701201222.ts b/.history/pages/api/registration_20220701201222.ts new file mode 100644 index 0000000..1669c32 --- /dev/null +++ b/.history/pages/api/registration_20220701201222.ts @@ -0,0 +1,19 @@ +import type { NextApiRequest, NextApiResponse } from 'next' +import Insert from "../../server/db/insert"; + +const sql = "INSERT INTO members (name_team_coach, coach_telefon_number, trainer_mail, city_team, training_institution_team, team_name, name_first_participant, first_partial_class, name_second_participant, second_class, name_third_party, third_part_class) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; +type Data = { + error: string, + } + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export default function handler( + req: NextApiRequest, + res: NextApiResponse + ) { + const re = /\s*,\s*/; + const parm = req.body; + Insert(sql, parm.split(re), function(data){ + res.status(200).json(data); + }) + } \ No newline at end of file diff --git a/.history/pages/index_20210629061557.tsx b/.history/pages/index_20210629061557.tsx new file mode 100644 index 0000000..e94449b --- /dev/null +++ b/.history/pages/index_20210629061557.tsx @@ -0,0 +1,64 @@ +import { format, parseISO } from 'date-fns'; +import { GetStaticProps } from 'next'; +import Link from 'next/link'; +import React from 'react'; +import Layout from '../components/Layout'; +import { getAllPosts } from '../lib/api'; +import { PostType } from '../types/post'; + +type IndexProps = { + posts: PostType[]; +}; + +export const Index = ({ posts }: IndexProps): JSX.Element => { + return ( + +

Home Page

+

Next.js starter for your next blog or personal site. Built with:

+
    +
  • Next.js
  • +
  • Typescript
  • +
  • MDX
  • +
  • Tailwind CSS
  • +
+ + + Get the source code! + + + {posts.map((post) => ( + + ))} +
+ ); +}; + +export const getStaticProps: GetStaticProps = async () => { + const posts = getAllPosts(['date', 'description', 'slug', 'title']); + + return { + props: { posts }, + }; +}; + +export default Index; diff --git a/.history/pages/index_20220611184250.tsx b/.history/pages/index_20220611184250.tsx new file mode 100644 index 0000000..0899275 --- /dev/null +++ b/.history/pages/index_20220611184250.tsx @@ -0,0 +1,64 @@ +import { format, parseISO } from 'date-fns'; +import { GetStaticProps } from 'next'; +import Link from 'next/link'; +import React from 'react'; +import Layout from '../components/Layout'; +import { getAllPosts } from '../lib/api'; +import { PostType } from '../types/post'; + +type IndexProps = { + posts: PostType[]; +}; + +export const Index = ({ posts }: IndexProps): JSX.Element => { + return ( + +

Робототехнический фестиваль RobotTop

+

Next.js starter for your next blog or personal site. Built with:

+
    +
  • Next.js
  • +
  • Typescript
  • +
  • MDX
  • +
  • Tailwind CSS
  • +
+ + + Get the source code! + + + {posts.map((post) => ( + + ))} +
+ ); +}; + +export const getStaticProps: GetStaticProps = async () => { + const posts = getAllPosts(['date', 'description', 'slug', 'title']); + + return { + props: { posts }, + }; +}; + +export default Index; diff --git a/.history/pages/index_20220611184406.tsx b/.history/pages/index_20220611184406.tsx new file mode 100644 index 0000000..1590db5 --- /dev/null +++ b/.history/pages/index_20220611184406.tsx @@ -0,0 +1,64 @@ +import { format, parseISO } from 'date-fns'; +import { GetStaticProps } from 'next'; +import Link from 'next/link'; +import React from 'react'; +import Layout from '../components/Layout'; +import { getAllPosts } from '../lib/api'; +import { PostType } from '../types/post'; + +type IndexProps = { + posts: PostType[]; +}; + +export const Index = ({ posts }: IndexProps): JSX.Element => { + return ( + +

Робототехнический фестиваль RobotTop

+

Next.js starter for your next blog or personal site. Built with:

+
    +
  • Next.js
  • +
  • Typescript
  • +
  • MDX
  • +
  • Tailwind CSS
  • +
+ + + Get the source code! + + + {posts.map((post) => ( + + ))} +
+ ); +}; + +export const getStaticProps: GetStaticProps = async () => { + const posts = getAllPosts(['date', 'description', 'slug', 'title']); + + return { + props: { posts }, + }; +}; + +export default Index; diff --git a/.history/pages/index_20220611184426.tsx b/.history/pages/index_20220611184426.tsx new file mode 100644 index 0000000..be51cd1 --- /dev/null +++ b/.history/pages/index_20220611184426.tsx @@ -0,0 +1,64 @@ +import { format, parseISO } from 'date-fns'; +import { GetStaticProps } from 'next'; +import Link from 'next/link'; +import React from 'react'; +import Layout from '../components/Layout'; +import { getAllPosts } from '../lib/api'; +import { PostType } from '../types/post'; + +type IndexProps = { + posts: PostType[]; +}; + +export const Index = ({ posts }: IndexProps): JSX.Element => { + return ( + +

Робототехнический фестиваль RobotTop

+

Next.js starter for your next blog or personal site. Built with:

+
    +
  • Next.js
  • +
  • Typescript
  • +
  • MDX
  • +
  • Tailwind CSS
  • +
+ + + Записаться на соревнования! + + + {posts.map((post) => ( + + ))} +
+ ); +}; + +export const getStaticProps: GetStaticProps = async () => { + const posts = getAllPosts(['date', 'description', 'slug', 'title']); + + return { + props: { posts }, + }; +}; + +export default Index; diff --git a/.history/pages/index_20220613101317.tsx b/.history/pages/index_20220613101317.tsx new file mode 100644 index 0000000..a869475 --- /dev/null +++ b/.history/pages/index_20220613101317.tsx @@ -0,0 +1,64 @@ +import { format, parseISO } from 'date-fns'; +import { GetStaticProps } from 'next'; +import Link from 'next/link'; +import React from 'react'; +import Layout from '../components/Layout'; +import { getAllPosts } from '../lib/api'; +import { PostType } from '../types/post'; + +type IndexProps = { + posts: PostType[]; +}; + +export const Index = ({ posts }: IndexProps): JSX.Element => { + return ( + Расписание +

Робототехнический фестиваль RobotTop

+

Next.js starter for your next blog or personal site. Built with:

+
    +
  • Next.js
  • +
  • Typescript
  • +
  • MDX
  • +
  • Tailwind CSS
  • +
+ + + Регистрация команд + + + {posts.map((post) => ( + + ))} +
+ ); +}; + +export const getStaticProps: GetStaticProps = async () => { + const posts = getAllPosts(['date', 'description', 'slug', 'title']); + + return { + props: { posts }, + }; +}; + +export default Index; diff --git a/.history/pages/index_20220613101516.tsx b/.history/pages/index_20220613101516.tsx new file mode 100644 index 0000000..2dca5a3 --- /dev/null +++ b/.history/pages/index_20220613101516.tsx @@ -0,0 +1,64 @@ +import { format, parseISO } from 'date-fns'; +import { GetStaticProps } from 'next'; +import Link from 'next/link'; +import React from 'react'; +import Layout from '../components/Layout'; +import { getAllPosts } from '../lib/api'; +import { PostType } from '../types/post'; + +type IndexProps = { + posts: PostType[]; +}; + +export const Index = ({ posts }: IndexProps): JSX.Element => { + return ( + Расписание +

Робототехнический фестиваль RobotTop

+

РоботТОП – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+
    +
  • Любая робототехническая платформа
  • +
  • Команда от 2 до 3 человек
  • +
  • 11 возрастных групп
  • +
  • Свобода творчества
  • +
+ + + Регистрация команд + + + {posts.map((post) => ( + + ))} +
+ ); +}; + +export const getStaticProps: GetStaticProps = async () => { + const posts = getAllPosts(['date', 'description', 'slug', 'title']); + + return { + props: { posts }, + }; +}; + +export default Index; diff --git a/.history/pages/index_20220613101640.tsx b/.history/pages/index_20220613101640.tsx new file mode 100644 index 0000000..1701ebc --- /dev/null +++ b/.history/pages/index_20220613101640.tsx @@ -0,0 +1,64 @@ +import { format, parseISO } from 'date-fns'; +import { GetStaticProps } from 'next'; +import Link from 'next/link'; +import React from 'react'; +import Layout from '../components/Layout'; +import { getAllPosts } from '../lib/api'; +import { PostType } from '../types/post'; + +type IndexProps = { + posts: PostType[]; +}; + +export const Index = ({ posts }: IndexProps): JSX.Element => { + return ( + Расписание +

Робототехнический фестиваль RobotTop

+

РоботТОП – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+
    +
  • Любая робототехническая платформа
  • +
  • Команда от 2 до 3 человек
  • +
  • 11 возрастных групп
  • +
  • Свобода в творчестве
  • +
+ + + Регистрация команд + + + {posts.map((post) => ( + + ))} +
+ ); +}; + +export const getStaticProps: GetStaticProps = async () => { + const posts = getAllPosts(['date', 'description', 'slug', 'title']); + + return { + props: { posts }, + }; +}; + +export default Index; diff --git a/.history/pages/index_20220613103953.tsx b/.history/pages/index_20220613103953.tsx new file mode 100644 index 0000000..b87d8b3 --- /dev/null +++ b/.history/pages/index_20220613103953.tsx @@ -0,0 +1,64 @@ +import { format, parseISO } from 'date-fns'; +import { GetStaticProps } from 'next'; +import Link from 'next/link'; +import React from 'react'; +import Layout from '../components/Layout'; +import { getAllPosts } from '../lib/api'; +import { PostType } from '../types/post'; + +type IndexProps = { + posts: PostType[]; +}; + +export const Index = ({ posts }: IndexProps): JSX.Element => { + return ( + Расписание +

Робототехнический фестиваль RobotTop

+

РоботТОП – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+
    +
  • Любая робототехническая платформа
  • +
  • Команда от 2 до 3 человек
  • +
  • 11 возрастных групп
  • +
  • Свобода в творчестве
  • +
+ + + Регистрация команд + + + {posts.map((post) => ( + + ))} +
+ ); +}; + +export const getStaticProps: GetStaticProps = async () => { + const posts = getAllPosts(['date', 'description', 'slug', 'title']); + + return { + props: { posts }, + }; +}; + +export default Index; diff --git a/.history/pages/index_20220613104043.tsx b/.history/pages/index_20220613104043.tsx new file mode 100644 index 0000000..13cf667 --- /dev/null +++ b/.history/pages/index_20220613104043.tsx @@ -0,0 +1,64 @@ +import { format, parseISO } from 'date-fns'; +import { GetStaticProps } from 'next'; +import Link from 'next/link'; +import React from 'react'; +import Layout from '../components/Layout'; +import { getAllPosts } from '../lib/api'; +import { PostType } from '../types/post'; + +type IndexProps = { + posts: PostType[]; +}; + +export const Index = ({ posts }: IndexProps): JSX.Element => { + return ( + Расписание +

Робототехнический фестиваль RobotTop

+

РоботТОП – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+
    +
  • Любая робототехническая платформа
  • +
  • Команда от 2 до 3 человек
  • +
  • 11 возрастных групп
  • +
  • Свобода в творчестве
  • +
+ + + Регистрация команд + + + + {posts.map((post) => ( + + ))} +
+ ); +}; + +export const getStaticProps: GetStaticProps = async () => { + const posts = getAllPosts(['date', 'description', 'slug', 'title']); + + return { + props: { posts }, + }; +}; + +export default Index; diff --git a/.history/pages/index_20220613104058.tsx b/.history/pages/index_20220613104058.tsx new file mode 100644 index 0000000..13cf667 --- /dev/null +++ b/.history/pages/index_20220613104058.tsx @@ -0,0 +1,64 @@ +import { format, parseISO } from 'date-fns'; +import { GetStaticProps } from 'next'; +import Link from 'next/link'; +import React from 'react'; +import Layout from '../components/Layout'; +import { getAllPosts } from '../lib/api'; +import { PostType } from '../types/post'; + +type IndexProps = { + posts: PostType[]; +}; + +export const Index = ({ posts }: IndexProps): JSX.Element => { + return ( + Расписание +

Робототехнический фестиваль RobotTop

+

РоботТОП – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+
    +
  • Любая робототехническая платформа
  • +
  • Команда от 2 до 3 человек
  • +
  • 11 возрастных групп
  • +
  • Свобода в творчестве
  • +
+ + + Регистрация команд + + + + {posts.map((post) => ( + + ))} +
+ ); +}; + +export const getStaticProps: GetStaticProps = async () => { + const posts = getAllPosts(['date', 'description', 'slug', 'title']); + + return { + props: { posts }, + }; +}; + +export default Index; diff --git a/.history/pages/index_20220613105247.tsx b/.history/pages/index_20220613105247.tsx new file mode 100644 index 0000000..f44ecb3 --- /dev/null +++ b/.history/pages/index_20220613105247.tsx @@ -0,0 +1,64 @@ +import { format, parseISO } from 'date-fns'; +import { GetStaticProps } from 'next'; +import Link from 'next/link'; +import React from 'react'; +import Layout from '../components/Layout'; +import { getAllPosts } from '../lib/api'; +import { PostType } from '../types/post'; + +type IndexProps = { + posts: PostType[]; +}; + +export const Index = ({ posts }: IndexProps): JSX.Element => { + return ( + Расписание +

Робототехнический фестиваль RobotTop

+

РоботТОП – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+
    +
  • Любая робототехническая платформа
  • +
  • Команда от 2 до 3 человек
  • +
  • 11 возрастных групп
  • +
  • Свобода в творчестве
  • +
+ + + Регистрация команд + + + + {posts.map((post) => ( + + ))} +
+ ); +}; + +export const getStaticProps: GetStaticProps = async () => { + const posts = getAllPosts(['date', 'description', 'slug', 'title']); + + return { + props: { posts }, + }; +}; + +export default Index; diff --git a/.history/pages/index_20220613105320.tsx b/.history/pages/index_20220613105320.tsx new file mode 100644 index 0000000..2c02325 --- /dev/null +++ b/.history/pages/index_20220613105320.tsx @@ -0,0 +1,64 @@ +import { format, parseISO } from 'date-fns'; +import { GetStaticProps } from 'next'; +import Link from 'next/link'; +import React from 'react'; +import Layout from '../components/Layout'; +import { getAllPosts } from '../lib/api'; +import { PostType } from '../types/post'; + +type IndexProps = { + posts: PostType[]; +}; + +export const Index = ({ posts }: IndexProps): JSX.Element => { + return ( + Расписание +

Робототехнический фестиваль RobotTop

+

РоботТОП – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+
    +
  • Любая робототехническая платформа
  • +
  • Команда от 2 до 3 человек
  • +
  • 11 возрастных групп
  • +
  • Свобода в творчестве
  • +
+ + + Регистрация команд + + + + {posts.map((post) => ( + + ))} +
+ ); +}; + +export const getStaticProps: GetStaticProps = async () => { + const posts = getAllPosts(['date', 'description', 'slug', 'title']); + + return { + props: { posts }, + }; +}; + +export default Index; diff --git a/.history/pages/index_20220613135326.tsx b/.history/pages/index_20220613135326.tsx new file mode 100644 index 0000000..822bfb1 --- /dev/null +++ b/.history/pages/index_20220613135326.tsx @@ -0,0 +1,64 @@ +import { format, parseISO } from 'date-fns'; +import { GetStaticProps } from 'next'; +import Link from 'next/link'; +import React from 'react'; +import Layout from '../components/Layout'; +import { getAllPosts } from '../lib/api'; +import { PostType } from '../types/post'; + +type IndexProps = { + posts: PostType[]; +}; + +export const Index = ({ posts }: IndexProps): JSX.Element => { + return ( + Расписание +

Робототехнический фестиваль RobotTop

+

РоботТОП – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+
    +
  • Любая робототехническая платформа
  • +
  • Команда от 2 до 3 человек
  • +
  • 11 возрастных групп
  • +
  • Свобода в творчестве
  • +
+ + + Регистрация команды + + + + {posts.map((post) => ( + + ))} +
+ ); +}; + +export const getStaticProps: GetStaticProps = async () => { + const posts = getAllPosts(['date', 'description', 'slug', 'title']); + + return { + props: { posts }, + }; +}; + +export default Index; diff --git a/.history/pages/index_20220702183722.tsx b/.history/pages/index_20220702183722.tsx new file mode 100644 index 0000000..21618ae --- /dev/null +++ b/.history/pages/index_20220702183722.tsx @@ -0,0 +1,64 @@ +import { format, parseISO } from 'date-fns'; +import { GetStaticProps } from 'next'; +import Link from 'next/link'; +import React from 'react'; +import Layout from '../components/Layout'; +import { getAllPosts } from '../lib/api'; +import { PostType } from '../types/post'; + +type IndexProps = { + posts: PostType[]; +}; + +export const Index = ({ posts }: IndexProps): JSX.Element => { + return ( + +

Робототехнический фестиваль RobotTop

+

РоботТОП – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+
    +
  • Любая робототехническая платформа
  • +
  • Команда от 2 до 3 человек
  • +
  • 11 возрастных групп
  • +
  • Свобода в творчестве
  • +
+ + + Регистрация команды + + + + {posts.map((post) => ( + + ))} +
+ ); +}; + +export const getStaticProps: GetStaticProps = async () => { + const posts = getAllPosts(['date', 'description', 'slug', 'title']); + + return { + props: { posts }, + }; +}; + +export default Index; diff --git a/.history/pages/posts/[slug]_20210629061557.tsx b/.history/pages/posts/[slug]_20210629061557.tsx new file mode 100644 index 0000000..f0fcd44 --- /dev/null +++ b/.history/pages/posts/[slug]_20210629061557.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - Hunter Chang`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184043.tsx b/.history/pages/posts/[slug]_20220702184043.tsx new file mode 100644 index 0000000..30e7864 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184043.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - Hunter Chang`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184044.tsx b/.history/pages/posts/[slug]_20220702184044.tsx new file mode 100644 index 0000000..30e7864 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184044.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - Hunter Chang`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184047.tsx b/.history/pages/posts/[slug]_20220702184047.tsx new file mode 100644 index 0000000..f0fcd44 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184047.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - Hunter Chang`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184048.tsx b/.history/pages/posts/[slug]_20220702184048.tsx new file mode 100644 index 0000000..f0fcd44 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184048.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - Hunter Chang`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184557.tsx b/.history/pages/posts/[slug]_20220702184557.tsx new file mode 100644 index 0000000..e6c5321 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184557.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184558.tsx b/.history/pages/posts/[slug]_20220702184558.tsx new file mode 100644 index 0000000..e6c5321 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184558.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184616.tsx b/.history/pages/posts/[slug]_20220702184616.tsx new file mode 100644 index 0000000..9f852db --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184616.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184617.tsx b/.history/pages/posts/[slug]_20220702184617.tsx new file mode 100644 index 0000000..9f852db --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184617.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184619.tsx b/.history/pages/posts/[slug]_20220702184619.tsx new file mode 100644 index 0000000..e6c5321 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184619.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184620.tsx b/.history/pages/posts/[slug]_20220702184620.tsx new file mode 100644 index 0000000..e6c5321 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184620.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184622.tsx b/.history/pages/posts/[slug]_20220702184622.tsx new file mode 100644 index 0000000..6f0f7a7 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184622.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184623.tsx b/.history/pages/posts/[slug]_20220702184623.tsx new file mode 100644 index 0000000..6f0f7a7 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184623.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184639.tsx b/.history/pages/posts/[slug]_20220702184639.tsx new file mode 100644 index 0000000..e6c5321 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184639.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184640.tsx b/.history/pages/posts/[slug]_20220702184640.tsx new file mode 100644 index 0000000..e6c5321 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184640.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184650.tsx b/.history/pages/posts/[slug]_20220702184650.tsx new file mode 100644 index 0000000..e6c5321 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184650.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184651.tsx b/.history/pages/posts/[slug]_20220702184651.tsx new file mode 100644 index 0000000..e6c5321 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184651.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184653.tsx b/.history/pages/posts/[slug]_20220702184653.tsx new file mode 100644 index 0000000..6f0f7a7 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184653.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184654.tsx b/.history/pages/posts/[slug]_20220702184654.tsx new file mode 100644 index 0000000..6f0f7a7 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184654.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184658.tsx b/.history/pages/posts/[slug]_20220702184658.tsx new file mode 100644 index 0000000..e6c5321 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184658.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184659.tsx b/.history/pages/posts/[slug]_20220702184659.tsx new file mode 100644 index 0000000..e6c5321 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184659.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184713.tsx b/.history/pages/posts/[slug]_20220702184713.tsx new file mode 100644 index 0000000..8b31520 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184713.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184714.tsx b/.history/pages/posts/[slug]_20220702184714.tsx new file mode 100644 index 0000000..8b31520 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184714.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184806.tsx b/.history/pages/posts/[slug]_20220702184806.tsx new file mode 100644 index 0000000..c343587 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184806.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184807.tsx b/.history/pages/posts/[slug]_20220702184807.tsx new file mode 100644 index 0000000..c343587 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184807.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184813.tsx b/.history/pages/posts/[slug]_20220702184813.tsx new file mode 100644 index 0000000..8b31520 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184813.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184814.tsx b/.history/pages/posts/[slug]_20220702184814.tsx new file mode 100644 index 0000000..8b31520 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184814.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184825.tsx b/.history/pages/posts/[slug]_20220702184825.tsx new file mode 100644 index 0000000..cfcd85b --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184825.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184826.tsx b/.history/pages/posts/[slug]_20220702184826.tsx new file mode 100644 index 0000000..cfcd85b --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184826.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184833.tsx b/.history/pages/posts/[slug]_20220702184833.tsx new file mode 100644 index 0000000..8b31520 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184833.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184834.tsx b/.history/pages/posts/[slug]_20220702184834.tsx new file mode 100644 index 0000000..8b31520 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184834.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184851.tsx b/.history/pages/posts/[slug]_20220702184851.tsx new file mode 100644 index 0000000..5362209 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184851.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184852.tsx b/.history/pages/posts/[slug]_20220702184852.tsx new file mode 100644 index 0000000..5362209 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184852.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184858.tsx b/.history/pages/posts/[slug]_20220702184858.tsx new file mode 100644 index 0000000..211c939 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184858.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184859.tsx b/.history/pages/posts/[slug]_20220702184859.tsx new file mode 100644 index 0000000..211c939 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184859.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184911.tsx b/.history/pages/posts/[slug]_20220702184911.tsx new file mode 100644 index 0000000..1ae53ab --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184911.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + + +

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+ +
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184912.tsx b/.history/pages/posts/[slug]_20220702184912.tsx new file mode 100644 index 0000000..1ae53ab --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184912.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + + +

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+ +
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184916.tsx b/.history/pages/posts/[slug]_20220702184916.tsx new file mode 100644 index 0000000..dbe397f --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184916.tsx @@ -0,0 +1,91 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + + + +
+ +
+ +
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184917.tsx b/.history/pages/posts/[slug]_20220702184917.tsx new file mode 100644 index 0000000..dbe397f --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184917.tsx @@ -0,0 +1,91 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + + + +
+ +
+ +
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184922.tsx b/.history/pages/posts/[slug]_20220702184922.tsx new file mode 100644 index 0000000..9b20e95 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184922.tsx @@ -0,0 +1,91 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + + + + + + + + + ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184923.tsx b/.history/pages/posts/[slug]_20220702184923.tsx new file mode 100644 index 0000000..9b20e95 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184923.tsx @@ -0,0 +1,91 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + + + + + + + + + ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/posts/[slug]_20220702184934.tsx b/.history/pages/posts/[slug]_20220702184934.tsx new file mode 100644 index 0000000..211c939 --- /dev/null +++ b/.history/pages/posts/[slug]_20220702184934.tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/.history/pages/registration_20220613105138.tsx b/.history/pages/registration_20220613105138.tsx new file mode 100644 index 0000000..e69de29 diff --git a/.history/pages/registration_20220613105205.tsx b/.history/pages/registration_20220613105205.tsx new file mode 100644 index 0000000..c048ad2 --- /dev/null +++ b/.history/pages/registration_20220613105205.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const registration = (): JSX.Element => { + return ( + +

РоботТоп

+

Мы команда школы 103

+
+ ); +}; + +export default registration; diff --git a/.history/pages/registration_20220613105218.tsx b/.history/pages/registration_20220613105218.tsx new file mode 100644 index 0000000..86b080b --- /dev/null +++ b/.history/pages/registration_20220613105218.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+

Мы команда школы 103

+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613105530.tsx b/.history/pages/registration_20220613105530.tsx new file mode 100644 index 0000000..27487a5 --- /dev/null +++ b/.history/pages/registration_20220613105530.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+

ddd

+

dfff

+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613105813.tsx b/.history/pages/registration_20220613105813.tsx new file mode 100644 index 0000000..b23c98d --- /dev/null +++ b/.history/pages/registration_20220613105813.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+ +

dfff

+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613105938.tsx b/.history/pages/registration_20220613105938.tsx new file mode 100644 index 0000000..9f37df8 --- /dev/null +++ b/.history/pages/registration_20220613105938.tsx @@ -0,0 +1,150 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Personal Information

+

Use a permanent address where you can receive mail.

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613110330.tsx b/.history/pages/registration_20220613110330.tsx new file mode 100644 index 0000000..59e32f8 --- /dev/null +++ b/.history/pages/registration_20220613110330.tsx @@ -0,0 +1,150 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Personal Information

+

Use a permanent address where you can receive mail.

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613110456.tsx b/.history/pages/registration_20220613110456.tsx new file mode 100644 index 0000000..6e62926 --- /dev/null +++ b/.history/pages/registration_20220613110456.tsx @@ -0,0 +1,150 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Personal Information

+

Use a permanent address where you can receive mail.

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613110505.tsx b/.history/pages/registration_20220613110505.tsx new file mode 100644 index 0000000..0033f3f --- /dev/null +++ b/.history/pages/registration_20220613110505.tsx @@ -0,0 +1,150 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Personal Information

+

Use a permanent address where you can receive mail.

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613110758.tsx b/.history/pages/registration_20220613110758.tsx new file mode 100644 index 0000000..960290b --- /dev/null +++ b/.history/pages/registration_20220613110758.tsx @@ -0,0 +1,150 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные о команде

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613110824.tsx b/.history/pages/registration_20220613110824.tsx new file mode 100644 index 0000000..87437a1 --- /dev/null +++ b/.history/pages/registration_20220613110824.tsx @@ -0,0 +1,150 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613110907.tsx b/.history/pages/registration_20220613110907.tsx new file mode 100644 index 0000000..774e0f4 --- /dev/null +++ b/.history/pages/registration_20220613110907.tsx @@ -0,0 +1,150 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613110912.tsx b/.history/pages/registration_20220613110912.tsx new file mode 100644 index 0000000..cc8ad98 --- /dev/null +++ b/.history/pages/registration_20220613110912.tsx @@ -0,0 +1,150 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613110920.tsx b/.history/pages/registration_20220613110920.tsx new file mode 100644 index 0000000..de86c3b --- /dev/null +++ b/.history/pages/registration_20220613110920.tsx @@ -0,0 +1,150 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613110933.tsx b/.history/pages/registration_20220613110933.tsx new file mode 100644 index 0000000..b0d3d7f --- /dev/null +++ b/.history/pages/registration_20220613110933.tsx @@ -0,0 +1,150 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613111051.tsx b/.history/pages/registration_20220613111051.tsx new file mode 100644 index 0000000..4db20a7 --- /dev/null +++ b/.history/pages/registration_20220613111051.tsx @@ -0,0 +1,147 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613111140.tsx b/.history/pages/registration_20220613111140.tsx new file mode 100644 index 0000000..c5f4122 --- /dev/null +++ b/.history/pages/registration_20220613111140.tsx @@ -0,0 +1,147 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613111207.tsx b/.history/pages/registration_20220613111207.tsx new file mode 100644 index 0000000..8d08811 --- /dev/null +++ b/.history/pages/registration_20220613111207.tsx @@ -0,0 +1,147 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613111256.tsx b/.history/pages/registration_20220613111256.tsx new file mode 100644 index 0000000..036a8b2 --- /dev/null +++ b/.history/pages/registration_20220613111256.tsx @@ -0,0 +1,134 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613111313.tsx b/.history/pages/registration_20220613111313.tsx new file mode 100644 index 0000000..6cd7a1c --- /dev/null +++ b/.history/pages/registration_20220613111313.tsx @@ -0,0 +1,134 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613111319.tsx b/.history/pages/registration_20220613111319.tsx new file mode 100644 index 0000000..bcbd5b6 --- /dev/null +++ b/.history/pages/registration_20220613111319.tsx @@ -0,0 +1,134 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613111330.tsx b/.history/pages/registration_20220613111330.tsx new file mode 100644 index 0000000..c3b75e1 --- /dev/null +++ b/.history/pages/registration_20220613111330.tsx @@ -0,0 +1,134 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613111341.tsx b/.history/pages/registration_20220613111341.tsx new file mode 100644 index 0000000..bcbd5b6 --- /dev/null +++ b/.history/pages/registration_20220613111341.tsx @@ -0,0 +1,134 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613111353.tsx b/.history/pages/registration_20220613111353.tsx new file mode 100644 index 0000000..a807624 --- /dev/null +++ b/.history/pages/registration_20220613111353.tsx @@ -0,0 +1,134 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613111357.tsx b/.history/pages/registration_20220613111357.tsx new file mode 100644 index 0000000..8b5b7dd --- /dev/null +++ b/.history/pages/registration_20220613111357.tsx @@ -0,0 +1,134 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613111425.tsx b/.history/pages/registration_20220613111425.tsx new file mode 100644 index 0000000..373a25e --- /dev/null +++ b/.history/pages/registration_20220613111425.tsx @@ -0,0 +1,135 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613111429.tsx b/.history/pages/registration_20220613111429.tsx new file mode 100644 index 0000000..2edeb4b --- /dev/null +++ b/.history/pages/registration_20220613111429.tsx @@ -0,0 +1,135 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613111458.tsx b/.history/pages/registration_20220613111458.tsx new file mode 100644 index 0000000..1751117 --- /dev/null +++ b/.history/pages/registration_20220613111458.tsx @@ -0,0 +1,187 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613134008.tsx b/.history/pages/registration_20220613134008.tsx new file mode 100644 index 0000000..b26ec2a --- /dev/null +++ b/.history/pages/registration_20220613134008.tsx @@ -0,0 +1,200 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613134019.tsx b/.history/pages/registration_20220613134019.tsx new file mode 100644 index 0000000..b5f012c --- /dev/null +++ b/.history/pages/registration_20220613134019.tsx @@ -0,0 +1,200 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613134120.tsx b/.history/pages/registration_20220613134120.tsx new file mode 100644 index 0000000..7cd35df --- /dev/null +++ b/.history/pages/registration_20220613134120.tsx @@ -0,0 +1,200 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613134333.tsx b/.history/pages/registration_20220613134333.tsx new file mode 100644 index 0000000..9684bea --- /dev/null +++ b/.history/pages/registration_20220613134333.tsx @@ -0,0 +1,200 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613134430.tsx b/.history/pages/registration_20220613134430.tsx new file mode 100644 index 0000000..73524b6 --- /dev/null +++ b/.history/pages/registration_20220613134430.tsx @@ -0,0 +1,200 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613134557.tsx b/.history/pages/registration_20220613134557.tsx new file mode 100644 index 0000000..cf1715f --- /dev/null +++ b/.history/pages/registration_20220613134557.tsx @@ -0,0 +1,200 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613134648.tsx b/.history/pages/registration_20220613134648.tsx new file mode 100644 index 0000000..a8aacc7 --- /dev/null +++ b/.history/pages/registration_20220613134648.tsx @@ -0,0 +1,200 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613135232.tsx b/.history/pages/registration_20220613135232.tsx new file mode 100644 index 0000000..a0905ea --- /dev/null +++ b/.history/pages/registration_20220613135232.tsx @@ -0,0 +1,189 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613135236.tsx b/.history/pages/registration_20220613135236.tsx new file mode 100644 index 0000000..9671cea --- /dev/null +++ b/.history/pages/registration_20220613135236.tsx @@ -0,0 +1,188 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613135445.tsx b/.history/pages/registration_20220613135445.tsx new file mode 100644 index 0000000..bf1dd16 --- /dev/null +++ b/.history/pages/registration_20220613135445.tsx @@ -0,0 +1,189 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613135533.tsx b/.history/pages/registration_20220613135533.tsx new file mode 100644 index 0000000..8cf8029 --- /dev/null +++ b/.history/pages/registration_20220613135533.tsx @@ -0,0 +1,190 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613135656.tsx b/.history/pages/registration_20220613135656.tsx new file mode 100644 index 0000000..d39126d --- /dev/null +++ b/.history/pages/registration_20220613135656.tsx @@ -0,0 +1,191 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613135756.tsx b/.history/pages/registration_20220613135756.tsx new file mode 100644 index 0000000..db6a5e7 --- /dev/null +++ b/.history/pages/registration_20220613135756.tsx @@ -0,0 +1,195 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613135924.tsx b/.history/pages/registration_20220613135924.tsx new file mode 100644 index 0000000..355e71f --- /dev/null +++ b/.history/pages/registration_20220613135924.tsx @@ -0,0 +1,198 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613140253.tsx b/.history/pages/registration_20220613140253.tsx new file mode 100644 index 0000000..220a3a7 --- /dev/null +++ b/.history/pages/registration_20220613140253.tsx @@ -0,0 +1,233 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613140402.tsx b/.history/pages/registration_20220613140402.tsx new file mode 100644 index 0000000..254011b --- /dev/null +++ b/.history/pages/registration_20220613140402.tsx @@ -0,0 +1,233 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613144200.tsx b/.history/pages/registration_20220613144200.tsx new file mode 100644 index 0000000..944ed53 --- /dev/null +++ b/.history/pages/registration_20220613144200.tsx @@ -0,0 +1,260 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
SongArtistYear
The Sliding Mr. Bones (Next Stop, Pottersville)Malcolm Lockyer1961
Witchy WomanThe Eagles1972
Shining StarEarth, Wind, and Fire1975
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613144314.tsx b/.history/pages/registration_20220613144314.tsx new file mode 100644 index 0000000..6608a82 --- /dev/null +++ b/.history/pages/registration_20220613144314.tsx @@ -0,0 +1,257 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
StateCity
IndianaIndianapolis
OhioColumbus
MichiganDetroit
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613144404.tsx b/.history/pages/registration_20220613144404.tsx new file mode 100644 index 0000000..58f1e28 --- /dev/null +++ b/.history/pages/registration_20220613144404.tsx @@ -0,0 +1,257 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
StateCity
IndianaIndianapolis
OhioColumbus
MichiganDetroit
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613144459.tsx b/.history/pages/registration_20220613144459.tsx new file mode 100644 index 0000000..8c9526d --- /dev/null +++ b/.history/pages/registration_20220613144459.tsx @@ -0,0 +1,257 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
StateCity
IndianaIndianapolis
OhioColumbus
MichiganDetroit
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613144516.tsx b/.history/pages/registration_20220613144516.tsx new file mode 100644 index 0000000..e607345 --- /dev/null +++ b/.history/pages/registration_20220613144516.tsx @@ -0,0 +1,257 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
StateCity
IndianaIndianapolis
OhioColumbus
MichiganDetroit
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613144628.tsx b/.history/pages/registration_20220613144628.tsx new file mode 100644 index 0000000..362b93a --- /dev/null +++ b/.history/pages/registration_20220613144628.tsx @@ -0,0 +1,311 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Product name + + Color + + Category + + Price + + Edit +
+ Apple MacBook Pro 17" + + Sliver + + Laptop + + $2999 + + Edit +
+ Microsoft Surface Pro + + White + + Laptop PC + + $1999 + + Edit +
+ Magic Mouse 2 + + Black + + Accessories + + $99 + + Edit +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613144731.tsx b/.history/pages/registration_20220613144731.tsx new file mode 100644 index 0000000..3d2f200 --- /dev/null +++ b/.history/pages/registration_20220613144731.tsx @@ -0,0 +1,315 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Product name + + Color + + Category + + Price + + Edit +
+ Apple MacBook Pro 17" + + Sliver + + Laptop + + $2999 + + Edit +
+ Microsoft Surface Pro + + White + + Laptop PC + + $1999 + + Edit +
+ Magic Mouse 2 + + Black + + Accessories + + $99 + + Edit +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613144757.tsx b/.history/pages/registration_20220613144757.tsx new file mode 100644 index 0000000..7261582 --- /dev/null +++ b/.history/pages/registration_20220613144757.tsx @@ -0,0 +1,314 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Product name + + Color + + Category + + Price + + Edit +
+ Apple MacBook Pro 17" + + Sliver + + Laptop + + $2999 + + Edit +
+ Microsoft Surface Pro + + White + + Laptop PC + + $1999 + + Edit +
+ Magic Mouse 2 + + Black + + Accessories + + $99 + + Edit +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613144807.tsx b/.history/pages/registration_20220613144807.tsx new file mode 100644 index 0000000..21bc461 --- /dev/null +++ b/.history/pages/registration_20220613144807.tsx @@ -0,0 +1,314 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Product name + + Color + + Category + + Price + + Edit +
+ Apple MacBook Pro 17" + + Sliver + + Laptop + + $2999 + + Edit +
+ Microsoft Surface Pro + + White + + Laptop PC + + $1999 + + Edit +
+ Magic Mouse 2 + + Black + + Accessories + + $99 + + Edit +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613144812.tsx b/.history/pages/registration_20220613144812.tsx new file mode 100644 index 0000000..21476d5 --- /dev/null +++ b/.history/pages/registration_20220613144812.tsx @@ -0,0 +1,314 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Product name + + Color + + Category + + Price + + Edit +
+ Apple MacBook Pro 17" + + Sliver + + Laptop + + $2999 + + Edit +
+ Microsoft Surface Pro + + White + + Laptop PC + + $1999 + + Edit +
+ Magic Mouse 2 + + Black + + Accessories + + $99 + + Edit +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613144835.tsx b/.history/pages/registration_20220613144835.tsx new file mode 100644 index 0000000..23bcbcd --- /dev/null +++ b/.history/pages/registration_20220613144835.tsx @@ -0,0 +1,314 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Product name + + Color + + Category + + Price + + Edit +
+ Apple MacBook Pro 17" + + Sliver + + Laptop + + $2999 + + Edit +
+ Microsoft Surface Pro + + White + + Laptop PC + + $1999 + + Edit +
+ Magic Mouse 2 + + Black + + Accessories + + $99 + + Edit +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613144842.tsx b/.history/pages/registration_20220613144842.tsx new file mode 100644 index 0000000..28f7a98 --- /dev/null +++ b/.history/pages/registration_20220613144842.tsx @@ -0,0 +1,314 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Product name + + Color + + Category + + Price + + Edit +
+ Apple MacBook Pro 17" + + Sliver + + Laptop + + $2999 + + Edit +
+ Microsoft Surface Pro + + White + + Laptop PC + + $1999 + + Edit +
+ Magic Mouse 2 + + Black + + Accessories + + $99 + + Edit +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613144845.tsx b/.history/pages/registration_20220613144845.tsx new file mode 100644 index 0000000..7017dae --- /dev/null +++ b/.history/pages/registration_20220613144845.tsx @@ -0,0 +1,314 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Product name + + Color + + Category + + Price + + Edit +
+ Apple MacBook Pro 17" + + Sliver + + Laptop + + $2999 + + Edit +
+ Microsoft Surface Pro + + White + + Laptop PC + + $1999 + + Edit +
+ Magic Mouse 2 + + Black + + Accessories + + $99 + + Edit +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613144951.tsx b/.history/pages/registration_20220613144951.tsx new file mode 100644 index 0000000..8d9dceb --- /dev/null +++ b/.history/pages/registration_20220613144951.tsx @@ -0,0 +1,314 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Название команды + + Color + + Category + + Price + + Edit +
+ Apple MacBook Pro 17" + + Sliver + + Laptop + + $2999 + + Edit +
+ Microsoft Surface Pro + + White + + Laptop PC + + $1999 + + Edit +
+ Magic Mouse 2 + + Black + + Accessories + + $99 + + Edit +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613145002.tsx b/.history/pages/registration_20220613145002.tsx new file mode 100644 index 0000000..0123ffd --- /dev/null +++ b/.history/pages/registration_20220613145002.tsx @@ -0,0 +1,314 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + Category + + Price + + Edit +
+ Apple MacBook Pro 17" + + Sliver + + Laptop + + $2999 + + Edit +
+ Microsoft Surface Pro + + White + + Laptop PC + + $1999 + + Edit +
+ Magic Mouse 2 + + Black + + Accessories + + $99 + + Edit +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613145037.tsx b/.history/pages/registration_20220613145037.tsx new file mode 100644 index 0000000..d47778d --- /dev/null +++ b/.history/pages/registration_20220613145037.tsx @@ -0,0 +1,314 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс + + Edit +
+ Apple MacBook Pro 17" + + Sliver + + Laptop + + $2999 + + Edit +
+ Microsoft Surface Pro + + White + + Laptop PC + + $1999 + + Edit +
+ Magic Mouse 2 + + Black + + Accessories + + $99 + + Edit +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613145048.tsx b/.history/pages/registration_20220613145048.tsx new file mode 100644 index 0000000..aff1837 --- /dev/null +++ b/.history/pages/registration_20220613145048.tsx @@ -0,0 +1,311 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Apple MacBook Pro 17" + + Sliver + + Laptop + + $2999 + + Edit +
+ Microsoft Surface Pro + + White + + Laptop PC + + $1999 + + Edit +
+ Magic Mouse 2 + + Black + + Accessories + + $99 + + Edit +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613145108.tsx b/.history/pages/registration_20220613145108.tsx new file mode 100644 index 0000000..42165bd --- /dev/null +++ b/.history/pages/registration_20220613145108.tsx @@ -0,0 +1,274 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Apple MacBook Pro 17" + + Sliver + + Laptop + + $2999 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220613145223.tsx b/.history/pages/registration_20220613145223.tsx new file mode 100644 index 0000000..e6d683b --- /dev/null +++ b/.history/pages/registration_20220613145223.tsx @@ -0,0 +1,274 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220614072559.tsx b/.history/pages/registration_20220614072559.tsx new file mode 100644 index 0000000..cd71e35 --- /dev/null +++ b/.history/pages/registration_20220614072559.tsx @@ -0,0 +1,274 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220614074659.tsx b/.history/pages/registration_20220614074659.tsx new file mode 100644 index 0000000..d172618 --- /dev/null +++ b/.history/pages/registration_20220614074659.tsx @@ -0,0 +1,282 @@ +import React,{useRef} from 'react' +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault() + const data = new FormData(form.current) + fetch('/api/registration', { method: 'POST', body: data }) + .then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220614074809.tsx b/.history/pages/registration_20220614074809.tsx new file mode 100644 index 0000000..6b07b89 --- /dev/null +++ b/.history/pages/registration_20220614074809.tsx @@ -0,0 +1,283 @@ +import React,{useRef} from 'react' +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault() + const data = new FormData(form.current) + console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220614074900.tsx b/.history/pages/registration_20220614074900.tsx new file mode 100644 index 0000000..0ab86bd --- /dev/null +++ b/.history/pages/registration_20220614074900.tsx @@ -0,0 +1,283 @@ +import React,{useRef} from 'react' +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault() + const data = new FormData(form.current) + console.log(data); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220614074918.tsx b/.history/pages/registration_20220614074918.tsx new file mode 100644 index 0000000..87189af --- /dev/null +++ b/.history/pages/registration_20220614074918.tsx @@ -0,0 +1,283 @@ +import React,{useRef} from 'react' +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault() + const data = new FormData(form.current) + console.log(data.body); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220614074936.tsx b/.history/pages/registration_20220614074936.tsx new file mode 100644 index 0000000..0ab86bd --- /dev/null +++ b/.history/pages/registration_20220614074936.tsx @@ -0,0 +1,283 @@ +import React,{useRef} from 'react' +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault() + const data = new FormData(form.current) + console.log(data); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220614075104.tsx b/.history/pages/registration_20220614075104.tsx new file mode 100644 index 0000000..1677ad5 --- /dev/null +++ b/.history/pages/registration_20220614075104.tsx @@ -0,0 +1,283 @@ +import React,{useRef} from 'react' +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault() + const data = new FormData(form.current) + console.log(form.current); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220614075545.tsx b/.history/pages/registration_20220614075545.tsx new file mode 100644 index 0000000..494ca50 --- /dev/null +++ b/.history/pages/registration_20220614075545.tsx @@ -0,0 +1,283 @@ +import React,{useRef} from 'react' +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault() + const data = new FormData(form.append) + console.log(form.current); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220614075616.tsx b/.history/pages/registration_20220614075616.tsx new file mode 100644 index 0000000..17276b1 --- /dev/null +++ b/.history/pages/registration_20220614075616.tsx @@ -0,0 +1,283 @@ +import React,{useRef} from 'react' +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault() + const data = new FormData() + console.log(data.append); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220614075653.tsx b/.history/pages/registration_20220614075653.tsx new file mode 100644 index 0000000..d610584 --- /dev/null +++ b/.history/pages/registration_20220614075653.tsx @@ -0,0 +1,283 @@ +import React,{useRef} from 'react' +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault() + const data = new FormData(form.current) + console.log(data.append); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220614075940.tsx b/.history/pages/registration_20220614075940.tsx new file mode 100644 index 0000000..be5b4e3 --- /dev/null +++ b/.history/pages/registration_20220614075940.tsx @@ -0,0 +1,284 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault() + const data = new FormData(form.current) + // eslint-disable-next-line no-console + console.log(data.append); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220614080020.tsx b/.history/pages/registration_20220614080020.tsx new file mode 100644 index 0000000..745482b --- /dev/null +++ b/.history/pages/registration_20220614080020.tsx @@ -0,0 +1,284 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + const data = new FormData(form.current); + // eslint-disable-next-line no-console + console.log(data); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701192452.tsx b/.history/pages/registration_20220701192452.tsx new file mode 100644 index 0000000..e523e35 --- /dev/null +++ b/.history/pages/registration_20220701192452.tsx @@ -0,0 +1,285 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + const data = new FormData(form.current); + // eslint-disable-next-line no-console + console.log(e.target); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701192521.tsx b/.history/pages/registration_20220701192521.tsx new file mode 100644 index 0000000..05aefd9 --- /dev/null +++ b/.history/pages/registration_20220701192521.tsx @@ -0,0 +1,285 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + const data = new FormData(form.current); + // eslint-disable-next-line no-console + console.log(e.target.name_team_coach); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701192540.tsx b/.history/pages/registration_20220701192540.tsx new file mode 100644 index 0000000..1f27bc2 --- /dev/null +++ b/.history/pages/registration_20220701192540.tsx @@ -0,0 +1,285 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + const data = new FormData(form.current); + // eslint-disable-next-line no-console + console.log(e.target.name_team_coach.value); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701192721.tsx b/.history/pages/registration_20220701192721.tsx new file mode 100644 index 0000000..7cb7736 --- /dev/null +++ b/.history/pages/registration_20220701192721.tsx @@ -0,0 +1,285 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + const data = new FormData(form.current); + // eslint-disable-next-line no-console + console.log(e.target.value); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701192800.tsx b/.history/pages/registration_20220701192800.tsx new file mode 100644 index 0000000..dd13ea6 --- /dev/null +++ b/.history/pages/registration_20220701192800.tsx @@ -0,0 +1,285 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + const data = new FormData(form.current); + // eslint-disable-next-line no-console + console.log(data); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701192835.tsx b/.history/pages/registration_20220701192835.tsx new file mode 100644 index 0000000..e9042be --- /dev/null +++ b/.history/pages/registration_20220701192835.tsx @@ -0,0 +1,285 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + const data = new FormData(form.current.value); + // eslint-disable-next-line no-console + console.log(data); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701192940.tsx b/.history/pages/registration_20220701192940.tsx new file mode 100644 index 0000000..3850711 --- /dev/null +++ b/.history/pages/registration_20220701192940.tsx @@ -0,0 +1,286 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = event.currentTarget + // eslint-disable-next-line no-console + console.log(form); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701192944.tsx b/.history/pages/registration_20220701192944.tsx new file mode 100644 index 0000000..ff8625d --- /dev/null +++ b/.history/pages/registration_20220701192944.tsx @@ -0,0 +1,286 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.currentTarget + // eslint-disable-next-line no-console + console.log(form); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701193004.tsx b/.history/pages/registration_20220701193004.tsx new file mode 100644 index 0000000..f7345c0 --- /dev/null +++ b/.history/pages/registration_20220701193004.tsx @@ -0,0 +1,286 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.currentTarget.value + // eslint-disable-next-line no-console + console.log(form); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701193056.tsx b/.history/pages/registration_20220701193056.tsx new file mode 100644 index 0000000..3cba9d2 --- /dev/null +++ b/.history/pages/registration_20220701193056.tsx @@ -0,0 +1,290 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.currentTarget.value; + // eslint-disable-next-line no-console + // console.log(form); + const formElements = form.elements as typeof form.elements & { + usernameInput: {value: string} + }; + console.log(formElements); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701193527.tsx b/.history/pages/registration_20220701193527.tsx new file mode 100644 index 0000000..2dd31cc --- /dev/null +++ b/.history/pages/registration_20220701193527.tsx @@ -0,0 +1,287 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.target.value; + // eslint-disable-next-line no-console + console.log(form); + + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701193547.tsx b/.history/pages/registration_20220701193547.tsx new file mode 100644 index 0000000..325623c --- /dev/null +++ b/.history/pages/registration_20220701193547.tsx @@ -0,0 +1,287 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.target.name_team_coach.value; + // eslint-disable-next-line no-console + console.log(form); + + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701193600.tsx b/.history/pages/registration_20220701193600.tsx new file mode 100644 index 0000000..ecad358 --- /dev/null +++ b/.history/pages/registration_20220701193600.tsx @@ -0,0 +1,287 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.target; + // eslint-disable-next-line no-console + console.log(form); + + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701193616.tsx b/.history/pages/registration_20220701193616.tsx new file mode 100644 index 0000000..75e3812 --- /dev/null +++ b/.history/pages/registration_20220701193616.tsx @@ -0,0 +1,287 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.target[0].value; + // eslint-disable-next-line no-console + console.log(form); + + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701193625.tsx b/.history/pages/registration_20220701193625.tsx new file mode 100644 index 0000000..1122be1 --- /dev/null +++ b/.history/pages/registration_20220701193625.tsx @@ -0,0 +1,287 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.target[2].value; + // eslint-disable-next-line no-console + console.log(form); + + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701194010.tsx b/.history/pages/registration_20220701194010.tsx new file mode 100644 index 0000000..ecad358 --- /dev/null +++ b/.history/pages/registration_20220701194010.tsx @@ -0,0 +1,287 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.target; + // eslint-disable-next-line no-console + console.log(form); + + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701194110.tsx b/.history/pages/registration_20220701194110.tsx new file mode 100644 index 0000000..ad740a0 --- /dev/null +++ b/.history/pages/registration_20220701194110.tsx @@ -0,0 +1,287 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.target.length; + // eslint-disable-next-line no-console + console.log(form); + + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701194225.tsx b/.history/pages/registration_20220701194225.tsx new file mode 100644 index 0000000..27eb5ca --- /dev/null +++ b/.history/pages/registration_20220701194225.tsx @@ -0,0 +1,290 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.target.length; + form.map((row, count) => { + console.log(row) + }); + // eslint-disable-next-line no-console + console.log(form); + + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701194312.tsx b/.history/pages/registration_20220701194312.tsx new file mode 100644 index 0000000..6e89fb0 --- /dev/null +++ b/.history/pages/registration_20220701194312.tsx @@ -0,0 +1,290 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.target.length; + form.map((row) => + console.log(row) + ); + // eslint-disable-next-line no-console + console.log(form); + + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701194319.tsx b/.history/pages/registration_20220701194319.tsx new file mode 100644 index 0000000..358eef6 --- /dev/null +++ b/.history/pages/registration_20220701194319.tsx @@ -0,0 +1,290 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.target; + form.map((row) => + console.log(row) + ); + // eslint-disable-next-line no-console + console.log(form); + + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701194411.tsx b/.history/pages/registration_20220701194411.tsx new file mode 100644 index 0000000..2dd31cc --- /dev/null +++ b/.history/pages/registration_20220701194411.tsx @@ -0,0 +1,287 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.target.value; + // eslint-disable-next-line no-console + console.log(form); + + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701194431.tsx b/.history/pages/registration_20220701194431.tsx new file mode 100644 index 0000000..ecad358 --- /dev/null +++ b/.history/pages/registration_20220701194431.tsx @@ -0,0 +1,287 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.target; + // eslint-disable-next-line no-console + console.log(form); + + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701194525.tsx b/.history/pages/registration_20220701194525.tsx new file mode 100644 index 0000000..1c88bf4 --- /dev/null +++ b/.history/pages/registration_20220701194525.tsx @@ -0,0 +1,287 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.target; + // eslint-disable-next-line no-console + console.log(form.length); + form + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701194540.tsx b/.history/pages/registration_20220701194540.tsx new file mode 100644 index 0000000..3e682af --- /dev/null +++ b/.history/pages/registration_20220701194540.tsx @@ -0,0 +1,287 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.target; + // eslint-disable-next-line no-console + console.log(form.value); + form + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701194552.tsx b/.history/pages/registration_20220701194552.tsx new file mode 100644 index 0000000..7a03213 --- /dev/null +++ b/.history/pages/registration_20220701194552.tsx @@ -0,0 +1,287 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.target; + // eslint-disable-next-line no-console + console.log(form[1].value); + form + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701194657.tsx b/.history/pages/registration_20220701194657.tsx new file mode 100644 index 0000000..2e2b379 --- /dev/null +++ b/.history/pages/registration_20220701194657.tsx @@ -0,0 +1,287 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.target; + // eslint-disable-next-line no-console + console.log(form[1].value); + form.map((num) => console.log(num.value)); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701194812.tsx b/.history/pages/registration_20220701194812.tsx new file mode 100644 index 0000000..3f24544 --- /dev/null +++ b/.history/pages/registration_20220701194812.tsx @@ -0,0 +1,287 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = JSON.stringify(e.target); + // eslint-disable-next-line no-console + console.log(form); + // form.map((num) => console.log(num.value)); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701194854.tsx b/.history/pages/registration_20220701194854.tsx new file mode 100644 index 0000000..bc51201 --- /dev/null +++ b/.history/pages/registration_20220701194854.tsx @@ -0,0 +1,287 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.target; + // eslint-disable-next-line no-console + console.log(form[1].value); + form.map(console.log(1)); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701194959.tsx b/.history/pages/registration_20220701194959.tsx new file mode 100644 index 0000000..c819ce8 --- /dev/null +++ b/.history/pages/registration_20220701194959.tsx @@ -0,0 +1,289 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.target; + // eslint-disable-next-line no-console + + for (let i = 0; i < e.target.length; i++) { + console.log(form[i].value); + } + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701195022.tsx b/.history/pages/registration_20220701195022.tsx new file mode 100644 index 0000000..c28207b --- /dev/null +++ b/.history/pages/registration_20220701195022.tsx @@ -0,0 +1,289 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.target; + // eslint-disable-next-line no-console + + for (let i = 1; i < e.target.length; i++) { + console.log(form[i].value); + } + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701195028.tsx b/.history/pages/registration_20220701195028.tsx new file mode 100644 index 0000000..c819ce8 --- /dev/null +++ b/.history/pages/registration_20220701195028.tsx @@ -0,0 +1,289 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.target; + // eslint-disable-next-line no-console + + for (let i = 0; i < e.target.length; i++) { + console.log(form[i].value); + } + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701195223.tsx b/.history/pages/registration_20220701195223.tsx new file mode 100644 index 0000000..d4a9c00 --- /dev/null +++ b/.history/pages/registration_20220701195223.tsx @@ -0,0 +1,290 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + let data =[]; + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length; i++) { + data.push(form[i].value); + } + console.log(data); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701195356.tsx b/.history/pages/registration_20220701195356.tsx new file mode 100644 index 0000000..459b9ec --- /dev/null +++ b/.history/pages/registration_20220701195356.tsx @@ -0,0 +1,290 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + let data =[]; + e.preventDefault(); + + //const data = new FormData(form.current.value); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + console.log(data); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701195457.tsx b/.history/pages/registration_20220701195457.tsx new file mode 100644 index 0000000..b2fca87 --- /dev/null +++ b/.history/pages/registration_20220701195457.tsx @@ -0,0 +1,288 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + console.log(data); + //fetch('/api/registration', { method: 'POST', body: data }) + //.then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701195615.tsx b/.history/pages/registration_20220701195615.tsx new file mode 100644 index 0000000..e6418d5 --- /dev/null +++ b/.history/pages/registration_20220701195615.tsx @@ -0,0 +1,288 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + .then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701195637.tsx b/.history/pages/registration_20220701195637.tsx new file mode 100644 index 0000000..e965b10 --- /dev/null +++ b/.history/pages/registration_20220701195637.tsx @@ -0,0 +1,288 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + // .then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701200419.tsx b/.history/pages/registration_20220701200419.tsx new file mode 100644 index 0000000..c9cfd1d --- /dev/null +++ b/.history/pages/registration_20220701200419.tsx @@ -0,0 +1,289 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + // .then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701202051.tsx b/.history/pages/registration_20220701202051.tsx new file mode 100644 index 0000000..40a1b10 --- /dev/null +++ b/.history/pages/registration_20220701202051.tsx @@ -0,0 +1,68 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + // .then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ + + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+ +
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701202057.tsx b/.history/pages/registration_20220701202057.tsx new file mode 100644 index 0000000..61fc54e --- /dev/null +++ b/.history/pages/registration_20220701202057.tsx @@ -0,0 +1,67 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + // .then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ + + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701202108.tsx b/.history/pages/registration_20220701202108.tsx new file mode 100644 index 0000000..19c2cfe --- /dev/null +++ b/.history/pages/registration_20220701202108.tsx @@ -0,0 +1,67 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + // .then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ {RegistrationForm} + + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701202123.tsx b/.history/pages/registration_20220701202123.tsx new file mode 100644 index 0000000..5daf7ec --- /dev/null +++ b/.history/pages/registration_20220701202123.tsx @@ -0,0 +1,67 @@ +import React,{useRef} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; + +export const Registration = (): JSX.Element => { + const form = useRef(null); + const submit = e => { + const data =[]; + e.preventDefault(); + const form = e.target; + // eslint-disable-next-line no-console + for (let i = 0; i < e.target.length-1; i++) { + data.push(form[i].value); + } + JSON.stringify(data); + console.log(data); + fetch('/api/registration', { method: 'POST', body: data }) + // .then(res => res.json()) + // .then(json => setUser(json.user)) + } + return ( + +

РоботТоп

+ + + + + + + + + + + + + + + + + + +
+ Название команды + + Учебное заведение + + ФИО участников + + Класс +
+ Фиксики + + МАОУ СОШ 103 + + Иван, Петр, Дмитрий + + 1 +
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220701203004.tsx b/.history/pages/registration_20220701203004.tsx new file mode 100644 index 0000000..e72abc0 --- /dev/null +++ b/.history/pages/registration_20220701203004.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; + +export const Registration = (): JSX.Element => { + + return ( + +

РоботТоп

+ + +
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702133519.tsx b/.history/pages/registration_20220702133519.tsx new file mode 100644 index 0000000..0e9f0dc --- /dev/null +++ b/.history/pages/registration_20220702133519.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; + +export const Registration = (): JSX.Element => { + + return ( + + + + + ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702143948.tsx b/.history/pages/registration_20220702143948.tsx new file mode 100644 index 0000000..0aaf4b1 --- /dev/null +++ b/.history/pages/registration_20220702143948.tsx @@ -0,0 +1,47 @@ +import React from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; + +export const Registration = (): JSX.Element => { + + return ( + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702144235.tsx b/.history/pages/registration_20220702144235.tsx new file mode 100644 index 0000000..e3df8b6 --- /dev/null +++ b/.history/pages/registration_20220702144235.tsx @@ -0,0 +1,52 @@ +import React, {useEffect} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser } from '../redux/user'; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + useEffect(() => { + dispatch( fetchUser() ); + }, [1]); + return ( + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702144659.tsx b/.history/pages/registration_20220702144659.tsx new file mode 100644 index 0000000..e791435 --- /dev/null +++ b/.history/pages/registration_20220702144659.tsx @@ -0,0 +1,55 @@ +import React, {useEffect} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + useEffect(() => { + dispatch( fetchUser() ); + }, [1]); + + const { user_items, user_status } = useSelector(selectUserData); + const User = user_items.map((obj, index) => ); + return ( + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702145206.tsx b/.history/pages/registration_20220702145206.tsx new file mode 100644 index 0000000..7bc68c6 --- /dev/null +++ b/.history/pages/registration_20220702145206.tsx @@ -0,0 +1,55 @@ +import React, {useEffect} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + useEffect(() => { + dispatch( fetchUser() ); + }, [1]); + + const { user_items, user_status } = useSelector(selectUserData); + const User = user_items.map((obj, index) => ); + return ( + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702145910.tsx b/.history/pages/registration_20220702145910.tsx new file mode 100644 index 0000000..e791435 --- /dev/null +++ b/.history/pages/registration_20220702145910.tsx @@ -0,0 +1,55 @@ +import React, {useEffect} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + useEffect(() => { + dispatch( fetchUser() ); + }, [1]); + + const { user_items, user_status } = useSelector(selectUserData); + const User = user_items.map((obj, index) => ); + return ( + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702150042.tsx b/.history/pages/registration_20220702150042.tsx new file mode 100644 index 0000000..490ee26 --- /dev/null +++ b/.history/pages/registration_20220702150042.tsx @@ -0,0 +1,56 @@ +import React, {useEffect} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + useEffect(() => { + dispatch( fetchUser() ); + }, [1]); + + const { user_items, user_status } = useSelector(selectUserData); + console.log(user_items); + //const User = user_items.map((obj, index) => ); + return ( + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702150123.tsx b/.history/pages/registration_20220702150123.tsx new file mode 100644 index 0000000..5160d7d --- /dev/null +++ b/.history/pages/registration_20220702150123.tsx @@ -0,0 +1,56 @@ +import React, {useEffect} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + useEffect(() => { + dispatch( fetchUser() ); + }, [1]); + + const { user_items, user_status } = useSelector(selectUserData); + console.log(user_items); + const User = user_items.map((obj, index) => ); + return ( + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702150204.tsx b/.history/pages/registration_20220702150204.tsx new file mode 100644 index 0000000..e3dbff8 --- /dev/null +++ b/.history/pages/registration_20220702150204.tsx @@ -0,0 +1,58 @@ +import React, {useEffect} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + useEffect(() => { + dispatch( fetchUser() ); + }, [1]); + + const { user_items, user_status } = useSelector(selectUserData); + console.log(user_items); + const User = user_items.map((obj, index) => ); + return ( + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702150546.tsx b/.history/pages/registration_20220702150546.tsx new file mode 100644 index 0000000..b80dd1c --- /dev/null +++ b/.history/pages/registration_20220702150546.tsx @@ -0,0 +1,58 @@ +import React, {useEffect} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + useEffect(() => { + dispatch( fetchUser() ); + }, [1]); + + const { user_items, user_status } = useSelector(selectUserData); + console.log(user_items); + const User = user_items.map((obj, index) => console.log(obj)); + return ( + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702150558.tsx b/.history/pages/registration_20220702150558.tsx new file mode 100644 index 0000000..dbf9a0c --- /dev/null +++ b/.history/pages/registration_20220702150558.tsx @@ -0,0 +1,58 @@ +import React, {useEffect} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + useEffect(() => { + dispatch( fetchUser() ); + }, [1]); + + const { user_items, user_status } = useSelector(selectUserData); + console.log(user_items); + //const User = user_items.map((obj, index) => console.log(obj)); + return ( + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702150609.tsx b/.history/pages/registration_20220702150609.tsx new file mode 100644 index 0000000..69a4baa --- /dev/null +++ b/.history/pages/registration_20220702150609.tsx @@ -0,0 +1,58 @@ +import React, {useEffect} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + useEffect(() => { + dispatch( fetchUser() ); + }, [1]); + + const { user_items, user_status } = useSelector(selectUserData); + console.log(user_items); + const User = <>dd; + return ( + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702150623.tsx b/.history/pages/registration_20220702150623.tsx new file mode 100644 index 0000000..e3dbff8 --- /dev/null +++ b/.history/pages/registration_20220702150623.tsx @@ -0,0 +1,58 @@ +import React, {useEffect} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + useEffect(() => { + dispatch( fetchUser() ); + }, [1]); + + const { user_items, user_status } = useSelector(selectUserData); + console.log(user_items); + const User = user_items.map((obj, index) => ); + return ( + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702150647.tsx b/.history/pages/registration_20220702150647.tsx new file mode 100644 index 0000000..fd99511 --- /dev/null +++ b/.history/pages/registration_20220702150647.tsx @@ -0,0 +1,58 @@ +import React, {useEffect} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + useEffect(() => { + dispatch( fetchUser() ); + }, [1]); + + const { user_items, user_status } = useSelector(selectUserData); + console.log(user_items); + const User = user_items.map((obj, index) => ); + return ( + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + {User} + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702150700.tsx b/.history/pages/registration_20220702150700.tsx new file mode 100644 index 0000000..0a6a13a --- /dev/null +++ b/.history/pages/registration_20220702150700.tsx @@ -0,0 +1,58 @@ +import React, {useEffect} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + useEffect(() => { + dispatch( fetchUser() ); + }, [1]); + + const { user_items, user_status } = useSelector(selectUserData); + console.log(user_items); + const User = user_items.map((obj, index) => ); + return ( + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + { User } + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702150706.tsx b/.history/pages/registration_20220702150706.tsx new file mode 100644 index 0000000..07966dc --- /dev/null +++ b/.history/pages/registration_20220702150706.tsx @@ -0,0 +1,57 @@ +import React, {useEffect} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + useEffect(() => { + dispatch( fetchUser() ); + }, [1]); + + const { user_items, user_status } = useSelector(selectUserData); + const User = user_items.map((obj, index) => ); + return ( + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + { User } + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702151154.tsx b/.history/pages/registration_20220702151154.tsx new file mode 100644 index 0000000..21c3543 --- /dev/null +++ b/.history/pages/registration_20220702151154.tsx @@ -0,0 +1,62 @@ +import React, {useEffect} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; +let UserAdd = 1; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + + const UpdateUser = () => { + UserAdd++; + } + useEffect(() => { + dispatch( fetchUser() ); + }, [UserAdd]); + + const { user_items, user_status } = useSelector(selectUserData); + const User = user_items.map((obj, index) => ); + return ( + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + { User } + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702151241.tsx b/.history/pages/registration_20220702151241.tsx new file mode 100644 index 0000000..2d296fd --- /dev/null +++ b/.history/pages/registration_20220702151241.tsx @@ -0,0 +1,63 @@ +import React, {useEffect} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; +let UserAdd = 1; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + + const UpdateUser = () => { + UserAdd++; + console.log('Registration'); + } + useEffect(() => { + dispatch( fetchUser() ); + }, [UserAdd]); + + const { user_items, user_status } = useSelector(selectUserData); + const User = user_items.map((obj, index) => ); + return ( + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + { User } + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702151403.tsx b/.history/pages/registration_20220702151403.tsx new file mode 100644 index 0000000..7a30cc1 --- /dev/null +++ b/.history/pages/registration_20220702151403.tsx @@ -0,0 +1,62 @@ +import React, {useEffect, useState} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + const [UserAdd, setUserAdd] = useState(0); + const UpdateUser = () => { + setUserAdd(2); + console.log('Registration'); + } + useEffect(() => { + dispatch( fetchUser() ); + }, [UserAdd]); + + const { user_items, user_status } = useSelector(selectUserData); + const User = user_items.map((obj, index) => ); + return ( + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + { User } + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702151451.tsx b/.history/pages/registration_20220702151451.tsx new file mode 100644 index 0000000..3554412 --- /dev/null +++ b/.history/pages/registration_20220702151451.tsx @@ -0,0 +1,62 @@ +import React, {useEffect, useState} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + const [UserAdd, setUserAdd] = useState(0); + const UpdateUser = () => { + setUserAdd(UserAdd+1); + console.log('Registration'); + } + useEffect(() => { + dispatch( fetchUser() ); + }, [UserAdd]); + + const { user_items, user_status } = useSelector(selectUserData); + const User = user_items.map((obj, index) => ); + return ( + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + { User } + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702154853.tsx b/.history/pages/registration_20220702154853.tsx new file mode 100644 index 0000000..b0455b9 --- /dev/null +++ b/.history/pages/registration_20220702154853.tsx @@ -0,0 +1,81 @@ +import React, {useEffect, useState} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; +import { confirmAlert } from 'react-confirm-alert'; // Import +import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + const [UserAdd, setUserAdd] = useState(0); + const UpdateUser = () => { + setUserAdd(UserAdd+1); + confirmAlert({ + customUI: ({ onClose }) => { + return ( +
+

Are you sure?

+

You want to delete this file?

+ + +
+ ); + } + }); + } + useEffect(() => { + dispatch( fetchUser() ); + }, [UserAdd]); + + const { user_items, user_status } = useSelector(selectUserData); + const User = user_items.map((obj, index) => ); + return ( + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + { User } + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702155348.tsx b/.history/pages/registration_20220702155348.tsx new file mode 100644 index 0000000..53c0df6 --- /dev/null +++ b/.history/pages/registration_20220702155348.tsx @@ -0,0 +1,65 @@ +import React, {useEffect, useState} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; +import { ToastContainer, toast } from 'react-toastify'; +import 'react-toastify/dist/ReactToastify.css'; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + const [UserAdd, setUserAdd] = useState(0); + const notify = () => toast("Wow so easy !"); + const UpdateUser = () => { + setUserAdd(UserAdd+1); + notify; + } + useEffect(() => { + dispatch( fetchUser() ); + }, [UserAdd]); + + const { user_items, user_status } = useSelector(selectUserData); + const User = user_items.map((obj, index) => ); + return ( + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + { User } + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702155430.tsx b/.history/pages/registration_20220702155430.tsx new file mode 100644 index 0000000..902d37a --- /dev/null +++ b/.history/pages/registration_20220702155430.tsx @@ -0,0 +1,66 @@ +import React, {useEffect, useState} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; +import { ToastContainer, toast } from 'react-toastify'; +import 'react-toastify/dist/ReactToastify.css'; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + const [UserAdd, setUserAdd] = useState(0); + const notify = () => toast("Wow so easy !"); + const UpdateUser = () => { + setUserAdd(UserAdd+1); + notify; + } + useEffect(() => { + dispatch( fetchUser() ); + }, [UserAdd]); + + const { user_items, user_status } = useSelector(selectUserData); + const User = user_items.map((obj, index) => ); + return ( + + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + { User } + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702155513.tsx b/.history/pages/registration_20220702155513.tsx new file mode 100644 index 0000000..95cb1c7 --- /dev/null +++ b/.history/pages/registration_20220702155513.tsx @@ -0,0 +1,66 @@ +import React, {useEffect, useState} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; +import { ToastContainer, toast } from 'react-toastify'; +import 'react-toastify/dist/ReactToastify.css'; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + const [UserAdd, setUserAdd] = useState(0); + + const UpdateUser = () => { + setUserAdd(UserAdd+1); + toast("Wow so easy !"); + } + useEffect(() => { + dispatch( fetchUser() ); + }, [UserAdd]); + + const { user_items, user_status } = useSelector(selectUserData); + const User = user_items.map((obj, index) => ); + return ( + + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + { User } + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702155540.tsx b/.history/pages/registration_20220702155540.tsx new file mode 100644 index 0000000..74cce30 --- /dev/null +++ b/.history/pages/registration_20220702155540.tsx @@ -0,0 +1,66 @@ +import React, {useEffect, useState} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; +import { ToastContainer, toast } from 'react-toastify'; +import 'react-toastify/dist/ReactToastify.css'; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + const [UserAdd, setUserAdd] = useState(0); + + const UpdateUser = () => { + setUserAdd(UserAdd+1); + toast("Савсибо Ваша команда зарегистрированна"); + } + useEffect(() => { + dispatch( fetchUser() ); + }, [UserAdd]); + + const { user_items, user_status } = useSelector(selectUserData); + const User = user_items.map((obj, index) => ); + return ( + + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + { User } + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/pages/registration_20220702155603.tsx b/.history/pages/registration_20220702155603.tsx new file mode 100644 index 0000000..3c94809 --- /dev/null +++ b/.history/pages/registration_20220702155603.tsx @@ -0,0 +1,66 @@ +import React, {useEffect, useState} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; +import { ToastContainer, toast } from 'react-toastify'; +import 'react-toastify/dist/ReactToastify.css'; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + const [UserAdd, setUserAdd] = useState(0); + + const UpdateUser = () => { + setUserAdd(UserAdd+1); + toast("Спасибо Ваша команда зарегистрирована"); + } + useEffect(() => { + dispatch( fetchUser() ); + }, [UserAdd]); + + const { user_items, user_status } = useSelector(selectUserData); + const User = user_items.map((obj, index) => ); + return ( + + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + { User } + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/.history/posts/example-post_20210629061557.mdx b/.history/posts/example-post_20210629061557.mdx new file mode 100644 index 0000000..9d8b28e --- /dev/null +++ b/.history/posts/example-post_20210629061557.mdx @@ -0,0 +1,52 @@ +--- +title: Example Post +description: I care deeply for nature. Oh, you're gonna be in a coma, all right. He'll want to use your yacht, and I don't want this thing smelling like fish. Get me a vodka rocks. And a piece of toast. No! I was ashamed to be SEEN with you. I like being with you. +date: '2021-03-20' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + +```jsx:example-post.mdx +{`Bridge`} +``` + +### Code Blocks + +This starter also comes with fancy code blocks with code titles. + +```jsx:example.jsx +import React, { useState } from 'react'; + +function Example() { + // Declare a new state variable, which we'll call "count" + const [count, setCount] = useState(0); + + return ( +
+

You clicked {count} times

+ +
+ ); +} +``` + +Go back [Home](/). diff --git a/.history/posts/example-post_20220611185541.mdx b/.history/posts/example-post_20220611185541.mdx new file mode 100644 index 0000000..9f80bdc --- /dev/null +++ b/.history/posts/example-post_20220611185541.mdx @@ -0,0 +1,46 @@ +--- +title: Example Post +description: I care deeply for nature. Oh, you're gonna be in a coma, all right. He'll want to use your yacht, and I don't want this thing smelling like fish. Get me a vodka rocks. And a piece of toast. No! I was ashamed to be SEEN with you. I like being with you. +date: '2021-03-20' +image: '/images/bridge.jpg' +--- + + + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + +```jsx:example-post.mdx +{`Bridge`} +``` + +### Code Blocks + +This starter also comes with fancy code blocks with code titles. + +```jsx:example.jsx +import React, { useState } from 'react'; + +function Example() { + // Declare a new state variable, which we'll call "count" + const [count, setCount] = useState(0); + + return ( +
+

You clicked {count} times

+ +
+ ); +} +``` + +Go back [Home](/). diff --git a/.history/posts/example-post_20220611185549.mdx b/.history/posts/example-post_20220611185549.mdx new file mode 100644 index 0000000..f9a3a7d --- /dev/null +++ b/.history/posts/example-post_20220611185549.mdx @@ -0,0 +1,8 @@ +--- +title: Example Post +description: I care deeply for nature. Oh, you're gonna be in a coma, all right. He'll want to use your yacht, and I don't want this thing smelling like fish. Get me a vodka rocks. And a piece of toast. No! I was ashamed to be SEEN with you. I like being with you. +date: '2021-03-20' +image: '/images/bridge.jpg' +--- + + diff --git a/.history/posts/example-post_20220611185605.mdx b/.history/posts/example-post_20220611185605.mdx new file mode 100644 index 0000000..a7f426b --- /dev/null +++ b/.history/posts/example-post_20220611185605.mdx @@ -0,0 +1,18 @@ +--- +title: Example Post +description: I care deeply for nature. Oh, you're gonna be in a coma, all right. He'll want to use your yacht, and I don't want this thing smelling like fish. Get me a vodka rocks. And a piece of toast. No! I was ashamed to be SEEN with you. I like being with you. +date: '2021-03-20' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + + + +Go back [Home](/). diff --git a/.history/posts/example-post_20220611185619.mdx b/.history/posts/example-post_20220611185619.mdx new file mode 100644 index 0000000..5bb9d86 --- /dev/null +++ b/.history/posts/example-post_20220611185619.mdx @@ -0,0 +1,22 @@ +--- +title: Example Post +description: I care deeply for nature. Oh, you're gonna be in a coma, all right. He'll want to use your yacht, and I don't want this thing smelling like fish. Get me a vodka rocks. And a piece of toast. No! I was ashamed to be SEEN with you. I like being with you. +date: '2021-03-20' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + + + +Go back [Home](/). diff --git a/.history/posts/example-post_20220611185627.mdx b/.history/posts/example-post_20220611185627.mdx new file mode 100644 index 0000000..9d8b28e --- /dev/null +++ b/.history/posts/example-post_20220611185627.mdx @@ -0,0 +1,52 @@ +--- +title: Example Post +description: I care deeply for nature. Oh, you're gonna be in a coma, all right. He'll want to use your yacht, and I don't want this thing smelling like fish. Get me a vodka rocks. And a piece of toast. No! I was ashamed to be SEEN with you. I like being with you. +date: '2021-03-20' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + +```jsx:example-post.mdx +{`Bridge`} +``` + +### Code Blocks + +This starter also comes with fancy code blocks with code titles. + +```jsx:example.jsx +import React, { useState } from 'react'; + +function Example() { + // Declare a new state variable, which we'll call "count" + const [count, setCount] = useState(0); + + return ( +
+

You clicked {count} times

+ +
+ ); +} +``` + +Go back [Home](/). diff --git a/.history/posts/example-post_20220611185635.mdx b/.history/posts/example-post_20220611185635.mdx new file mode 100644 index 0000000..bc016b2 --- /dev/null +++ b/.history/posts/example-post_20220611185635.mdx @@ -0,0 +1,37 @@ +--- +title: Example Post +description: I care deeply for nature. Oh, you're gonna be in a coma, all right. He'll want to use your yacht, and I don't want this thing smelling like fish. Get me a vodka rocks. And a piece of toast. No! I was ashamed to be SEEN with you. I like being with you. +date: '2021-03-20' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + +```jsx:example-post.mdx +{`Bridge`} +``` + +### Code Blocks + +This starter also comes with fancy code blocks with code titles. + + +``` + +Go back [Home](/). diff --git a/.history/posts/example-post_20220611185642.mdx b/.history/posts/example-post_20220611185642.mdx new file mode 100644 index 0000000..e350498 --- /dev/null +++ b/.history/posts/example-post_20220611185642.mdx @@ -0,0 +1,36 @@ +--- +title: Example Post +description: I care deeply for nature. Oh, you're gonna be in a coma, all right. He'll want to use your yacht, and I don't want this thing smelling like fish. Get me a vodka rocks. And a piece of toast. No! I was ashamed to be SEEN with you. I like being with you. +date: '2021-03-20' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + +```jsx:example-post.mdx +{`Bridge`} +``` + +### Code Blocks + +This starter also comes with fancy code blocks with code titles. + + + +Go back [Home](/). diff --git a/.history/posts/example-post_20220611185655.mdx b/.history/posts/example-post_20220611185655.mdx new file mode 100644 index 0000000..24420f9 --- /dev/null +++ b/.history/posts/example-post_20220611185655.mdx @@ -0,0 +1,50 @@ +--- +title: Example Post +description: I care deeply for nature. Oh, you're gonna be in a coma, all right. He'll want to use your yacht, and I don't want this thing smelling like fish. Get me a vodka rocks. And a piece of toast. No! I was ashamed to be SEEN with you. I like being with you. +date: '2021-03-20' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + +```jsx:example-post.mdx +{`Bridge`} +``` + + + +```jsx:example.jsx +import React, { useState } from 'react'; + +function Example() { + // Declare a new state variable, which we'll call "count" + const [count, setCount] = useState(0); + + return ( +
+

You clicked {count} times

+ +
+ ); +} +``` + +Go back [Home](/). diff --git a/.history/posts/example-post_20220611185702.mdx b/.history/posts/example-post_20220611185702.mdx new file mode 100644 index 0000000..7468dc4 --- /dev/null +++ b/.history/posts/example-post_20220611185702.mdx @@ -0,0 +1,32 @@ +--- +title: Example Post +description: I care deeply for nature. Oh, you're gonna be in a coma, all right. He'll want to use your yacht, and I don't want this thing smelling like fish. Get me a vodka rocks. And a piece of toast. No! I was ashamed to be SEEN with you. I like being with you. +date: '2021-03-20' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + +```jsx:example-post.mdx +{`Bridge`} +``` + + + +Go back [Home](/). diff --git a/.history/posts/example-post_20220611185717.mdx b/.history/posts/example-post_20220611185717.mdx new file mode 100644 index 0000000..e11994f --- /dev/null +++ b/.history/posts/example-post_20220611185717.mdx @@ -0,0 +1,40 @@ +--- +title: Example Post +description: I care deeply for nature. Oh, you're gonna be in a coma, all right. He'll want to use your yacht, and I don't want this thing smelling like fish. Get me a vodka rocks. And a piece of toast. No! I was ashamed to be SEEN with you. I like being with you. +date: '2021-03-20' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + + + +### Code Blocks + +This starter also comes with fancy code blocks with code titles. + +```jsx:example.jsx +import React, { useState } from 'react'; + +function Example() { + // Declare a new state variable, which we'll call "count" + const [count, setCount] = useState(0); + + return ( +
+

You clicked {count} times

+ +
+ ); +} +``` + +Go back [Home](/). diff --git a/.history/posts/example-post_20220611185729.mdx b/.history/posts/example-post_20220611185729.mdx new file mode 100644 index 0000000..a7f426b --- /dev/null +++ b/.history/posts/example-post_20220611185729.mdx @@ -0,0 +1,18 @@ +--- +title: Example Post +description: I care deeply for nature. Oh, you're gonna be in a coma, all right. He'll want to use your yacht, and I don't want this thing smelling like fish. Get me a vodka rocks. And a piece of toast. No! I was ashamed to be SEEN with you. I like being with you. +date: '2021-03-20' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + + + +Go back [Home](/). diff --git a/.history/posts/example-post_20220611185740.mdx b/.history/posts/example-post_20220611185740.mdx new file mode 100644 index 0000000..b9e0f15 --- /dev/null +++ b/.history/posts/example-post_20220611185740.mdx @@ -0,0 +1,20 @@ +--- +title: Example Post +description: I care deeply for nature. Oh, you're gonna be in a coma, all right. He'll want to use your yacht, and I don't want this thing smelling like fish. Get me a vodka rocks. And a piece of toast. No! I was ashamed to be SEEN with you. I like being with you. +date: '2021-03-20' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + +## Heading H2 + + + +Go back [Home](/). diff --git a/.history/posts/example-post_20220611185749.mdx b/.history/posts/example-post_20220611185749.mdx new file mode 100644 index 0000000..5bb9d86 --- /dev/null +++ b/.history/posts/example-post_20220611185749.mdx @@ -0,0 +1,22 @@ +--- +title: Example Post +description: I care deeply for nature. Oh, you're gonna be in a coma, all right. He'll want to use your yacht, and I don't want this thing smelling like fish. Get me a vodka rocks. And a piece of toast. No! I was ashamed to be SEEN with you. I like being with you. +date: '2021-03-20' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + + + +Go back [Home](/). diff --git a/.history/posts/example-post_20220611185802.mdx b/.history/posts/example-post_20220611185802.mdx new file mode 100644 index 0000000..7468dc4 --- /dev/null +++ b/.history/posts/example-post_20220611185802.mdx @@ -0,0 +1,32 @@ +--- +title: Example Post +description: I care deeply for nature. Oh, you're gonna be in a coma, all right. He'll want to use your yacht, and I don't want this thing smelling like fish. Get me a vodka rocks. And a piece of toast. No! I was ashamed to be SEEN with you. I like being with you. +date: '2021-03-20' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + +```jsx:example-post.mdx +{`Bridge`} +``` + + + +Go back [Home](/). diff --git a/.history/posts/example-post_20220611185813.mdx b/.history/posts/example-post_20220611185813.mdx new file mode 100644 index 0000000..765ecea --- /dev/null +++ b/.history/posts/example-post_20220611185813.mdx @@ -0,0 +1,44 @@ +--- +title: Example Post +description: I care deeply for nature. Oh, you're gonna be in a coma, all right. He'll want to use your yacht, and I don't want this thing smelling like fish. Get me a vodka rocks. And a piece of toast. No! I was ashamed to be SEEN with you. I like being with you. +date: '2021-03-20' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + + + +### Code Blocks + +This starter also comes with fancy code blocks with code titles. + +```jsx:example.jsx +import React, { useState } from 'react'; + +function Example() { + // Declare a new state variable, which we'll call "count" + const [count, setCount] = useState(0); + + return ( +
+

You clicked {count} times

+ +
+ ); +} +``` + +Go back [Home](/). diff --git a/.history/posts/example-post_20220611185826.mdx b/.history/posts/example-post_20220611185826.mdx new file mode 100644 index 0000000..5bb9d86 --- /dev/null +++ b/.history/posts/example-post_20220611185826.mdx @@ -0,0 +1,22 @@ +--- +title: Example Post +description: I care deeply for nature. Oh, you're gonna be in a coma, all right. He'll want to use your yacht, and I don't want this thing smelling like fish. Get me a vodka rocks. And a piece of toast. No! I was ashamed to be SEEN with you. I like being with you. +date: '2021-03-20' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + + + +Go back [Home](/). diff --git a/.history/posts/example-post_20220611185858.mdx b/.history/posts/example-post_20220611185858.mdx new file mode 100644 index 0000000..8e6419d --- /dev/null +++ b/.history/posts/example-post_20220611185858.mdx @@ -0,0 +1,42 @@ +--- +title: Example Post +description: I care deeply for nature. Oh, you're gonna be in a coma, all right. He'll want to use your yacht, and I don't want this thing smelling like fish. Get me a vodka rocks. And a piece of toast. No! I was ashamed to be SEEN with you. I like being with you. +date: '2021-03-20' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + +### Code Blocks + +This starter also comes with fancy code blocks with code titles. + +```jsx:example.jsx +import React, { useState } from 'react'; + +function Example() { + // Declare a new state variable, which we'll call "count" + const [count, setCount] = useState(0); + + return ( +
+

You clicked {count} times

+ +
+ ); +} +``` + +Go back [Home](/). diff --git a/.history/posts/example-post_20220611185904.mdx b/.history/posts/example-post_20220611185904.mdx new file mode 100644 index 0000000..e64ab76 --- /dev/null +++ b/.history/posts/example-post_20220611185904.mdx @@ -0,0 +1,27 @@ +--- +title: Example Post +description: I care deeply for nature. Oh, you're gonna be in a coma, all right. He'll want to use your yacht, and I don't want this thing smelling like fish. Get me a vodka rocks. And a piece of toast. No! I was ashamed to be SEEN with you. I like being with you. +date: '2021-03-20' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + +### Code Blocks + +This starter also comes with fancy code blocks with code titles. + + +``` + +Go back [Home](/). diff --git a/.history/posts/example-post_20220611185915.mdx b/.history/posts/example-post_20220611185915.mdx new file mode 100644 index 0000000..52ba023 --- /dev/null +++ b/.history/posts/example-post_20220611185915.mdx @@ -0,0 +1,26 @@ +--- +title: Example Post +description: I care deeply for nature. Oh, you're gonna be in a coma, all right. He'll want to use your yacht, and I don't want this thing smelling like fish. Get me a vodka rocks. And a piece of toast. No! I was ashamed to be SEEN with you. I like being with you. +date: '2021-03-20' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + +### Code Blocks + +This starter also comes with fancy code blocks with code titles. + + + +Go back [Home](/). diff --git a/.history/posts/example-post_20220611185940.mdx b/.history/posts/example-post_20220611185940.mdx new file mode 100644 index 0000000..9d8b28e --- /dev/null +++ b/.history/posts/example-post_20220611185940.mdx @@ -0,0 +1,52 @@ +--- +title: Example Post +description: I care deeply for nature. Oh, you're gonna be in a coma, all right. He'll want to use your yacht, and I don't want this thing smelling like fish. Get me a vodka rocks. And a piece of toast. No! I was ashamed to be SEEN with you. I like being with you. +date: '2021-03-20' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + +```jsx:example-post.mdx +{`Bridge`} +``` + +### Code Blocks + +This starter also comes with fancy code blocks with code titles. + +```jsx:example.jsx +import React, { useState } from 'react'; + +function Example() { + // Declare a new state variable, which we'll call "count" + const [count, setCount] = useState(0); + + return ( +
+

You clicked {count} times

+ +
+ ); +} +``` + +Go back [Home](/). diff --git a/.history/posts/example-post_20220611190525.mdx b/.history/posts/example-post_20220611190525.mdx new file mode 100644 index 0000000..4ddecb5 --- /dev/null +++ b/.history/posts/example-post_20220611190525.mdx @@ -0,0 +1,52 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2021-03-20' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + +```jsx:example-post.mdx +{`Bridge`} +``` + +### Code Blocks + +This starter also comes with fancy code blocks with code titles. + +```jsx:example.jsx +import React, { useState } from 'react'; + +function Example() { + // Declare a new state variable, which we'll call "count" + const [count, setCount] = useState(0); + + return ( +
+

You clicked {count} times

+ +
+ ); +} +``` + +Go back [Home](/). diff --git a/.history/posts/example-post_20220611190559.mdx b/.history/posts/example-post_20220611190559.mdx new file mode 100644 index 0000000..48a0fab --- /dev/null +++ b/.history/posts/example-post_20220611190559.mdx @@ -0,0 +1,52 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + +```jsx:example-post.mdx +{`Bridge`} +``` + +### Code Blocks + +This starter also comes with fancy code blocks with code titles. + +```jsx:example.jsx +import React, { useState } from 'react'; + +function Example() { + // Declare a new state variable, which we'll call "count" + const [count, setCount] = useState(0); + + return ( +
+

You clicked {count} times

+ +
+ ); +} +``` + +Go back [Home](/). diff --git a/.history/posts/example-post_20220611190608.mdx b/.history/posts/example-post_20220611190608.mdx new file mode 100644 index 0000000..60c5459 --- /dev/null +++ b/.history/posts/example-post_20220611190608.mdx @@ -0,0 +1,32 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + +```jsx:example-post.mdx +{`Bridge`} +``` + + + +Go back [Home](/). diff --git a/.history/posts/example-post_20220611190617.mdx b/.history/posts/example-post_20220611190617.mdx new file mode 100644 index 0000000..94c5f83 --- /dev/null +++ b/.history/posts/example-post_20220611190617.mdx @@ -0,0 +1,30 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + +```jsx:example-post.mdx +{`Bridge`} +``` + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611190626.mdx b/.history/posts/example-post_20220611190626.mdx new file mode 100644 index 0000000..a5f7509 --- /dev/null +++ b/.history/posts/example-post_20220611190626.mdx @@ -0,0 +1,22 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611190638.mdx b/.history/posts/example-post_20220611190638.mdx new file mode 100644 index 0000000..11aea90 --- /dev/null +++ b/.history/posts/example-post_20220611190638.mdx @@ -0,0 +1,30 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/bridge.jpg' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + + +{`Bridge`} + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611191132.mdx b/.history/posts/example-post_20220611191132.mdx new file mode 100644 index 0000000..7c9cb03 --- /dev/null +++ b/.history/posts/example-post_20220611191132.mdx @@ -0,0 +1,30 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + + +{`Bridge`} + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611191147.mdx b/.history/posts/example-post_20220611191147.mdx new file mode 100644 index 0000000..e982970 --- /dev/null +++ b/.history/posts/example-post_20220611191147.mdx @@ -0,0 +1,30 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + + +{`Bridge`} + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611191154.mdx b/.history/posts/example-post_20220611191154.mdx new file mode 100644 index 0000000..8c4146b --- /dev/null +++ b/.history/posts/example-post_20220611191154.mdx @@ -0,0 +1,30 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Bridge`} + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + + +{`Bridge`} + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611191211.mdx b/.history/posts/example-post_20220611191211.mdx new file mode 100644 index 0000000..7d0391a --- /dev/null +++ b/.history/posts/example-post_20220611191211.mdx @@ -0,0 +1,30 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## Heading H2 + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + + +{`Bridge`} + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611191236.mdx b/.history/posts/example-post_20220611191236.mdx new file mode 100644 index 0000000..d59530b --- /dev/null +++ b/.history/posts/example-post_20220611191236.mdx @@ -0,0 +1,30 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +This is an example blog post with React components. This page is using the `Image` component from Next.js. + + +{`Bridge`} + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611191258.mdx b/.history/posts/example-post_20220611191258.mdx new file mode 100644 index 0000000..94b12f6 --- /dev/null +++ b/.history/posts/example-post_20220611191258.mdx @@ -0,0 +1,30 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +РоботТОП – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды. + + +{`Bridge`} + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611191709.mdx b/.history/posts/example-post_20220611191709.mdx new file mode 100644 index 0000000..3519c55 --- /dev/null +++ b/.history/posts/example-post_20220611191709.mdx @@ -0,0 +1,30 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

РоботТОП – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+ + +{`Bridge`} + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611191721.mdx b/.history/posts/example-post_20220611191721.mdx new file mode 100644 index 0000000..1c6e148 --- /dev/null +++ b/.history/posts/example-post_20220611191721.mdx @@ -0,0 +1,31 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

РоботТОП – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

РоботТОП – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+ + +{`Bridge`} + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611191808.mdx b/.history/posts/example-post_20220611191808.mdx new file mode 100644 index 0000000..91e4363 --- /dev/null +++ b/.history/posts/example-post_20220611191808.mdx @@ -0,0 +1,31 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

РоботТОП – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

Участники команд – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+ + +{`Bridge`} + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611191854.mdx b/.history/posts/example-post_20220611191854.mdx new file mode 100644 index 0000000..65d08f2 --- /dev/null +++ b/.history/posts/example-post_20220611191854.mdx @@ -0,0 +1,31 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+ + +{`Bridge`} + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611192045.mdx b/.history/posts/example-post_20220611192045.mdx new file mode 100644 index 0000000..0f8b9fc --- /dev/null +++ b/.history/posts/example-post_20220611192045.mdx @@ -0,0 +1,31 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+ +{`Bridge`} + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611192103.mdx b/.history/posts/example-post_20220611192103.mdx new file mode 100644 index 0000000..69144ef --- /dev/null +++ b/.history/posts/example-post_20220611192103.mdx @@ -0,0 +1,33 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

*РоботТОП преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+ + +{`Bridge`} + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611192116.mdx b/.history/posts/example-post_20220611192116.mdx new file mode 100644 index 0000000..125231c --- /dev/null +++ b/.history/posts/example-post_20220611192116.mdx @@ -0,0 +1,33 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+ + +{`Bridge`} + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611192128.mdx b/.history/posts/example-post_20220611192128.mdx new file mode 100644 index 0000000..02b7007 --- /dev/null +++ b/.history/posts/example-post_20220611192128.mdx @@ -0,0 +1,33 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+ + +{`Bridge`} + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611192233.mdx b/.history/posts/example-post_20220611192233.mdx new file mode 100644 index 0000000..123c279 --- /dev/null +++ b/.history/posts/example-post_20220611192233.mdx @@ -0,0 +1,35 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+ +{`Bridge`} + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611192551.mdx b/.history/posts/example-post_20220611192551.mdx new file mode 100644 index 0000000..08b1151 --- /dev/null +++ b/.history/posts/example-post_20220611192551.mdx @@ -0,0 +1,51 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ + +{`Bridge`} + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611192928.mdx b/.history/posts/example-post_20220611192928.mdx new file mode 100644 index 0000000..3494c6c --- /dev/null +++ b/.history/posts/example-post_20220611192928.mdx @@ -0,0 +1,63 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Bridge`} + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611193031.mdx b/.history/posts/example-post_20220611193031.mdx new file mode 100644 index 0000000..10c8d82 --- /dev/null +++ b/.history/posts/example-post_20220611193031.mdx @@ -0,0 +1,63 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Bridge`} + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611193109.mdx b/.history/posts/example-post_20220611193109.mdx new file mode 100644 index 0000000..3e847d9 --- /dev/null +++ b/.history/posts/example-post_20220611193109.mdx @@ -0,0 +1,63 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Bridge`} + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611193127.mdx b/.history/posts/example-post_20220611193127.mdx new file mode 100644 index 0000000..fe320ee --- /dev/null +++ b/.history/posts/example-post_20220611193127.mdx @@ -0,0 +1,63 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Bridge`} + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611193142.mdx b/.history/posts/example-post_20220611193142.mdx new file mode 100644 index 0000000..24a391c --- /dev/null +++ b/.history/posts/example-post_20220611193142.mdx @@ -0,0 +1,63 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Bridge`} + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611193241.mdx b/.history/posts/example-post_20220611193241.mdx new file mode 100644 index 0000000..eaadacc --- /dev/null +++ b/.history/posts/example-post_20220611193241.mdx @@ -0,0 +1,66 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Bridge`} +Рисунок 1 - Общий вид игрового поля + + + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611193244.mdx b/.history/posts/example-post_20220611193244.mdx new file mode 100644 index 0000000..0142484 --- /dev/null +++ b/.history/posts/example-post_20220611193244.mdx @@ -0,0 +1,66 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + + + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611193354.mdx b/.history/posts/example-post_20220611193354.mdx new file mode 100644 index 0000000..17a23eb --- /dev/null +++ b/.history/posts/example-post_20220611193354.mdx @@ -0,0 +1,71 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611193454.mdx b/.history/posts/example-post_20220611193454.mdx new file mode 100644 index 0000000..24a57b1 --- /dev/null +++ b/.history/posts/example-post_20220611193454.mdx @@ -0,0 +1,76 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+ + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611193554.mdx b/.history/posts/example-post_20220611193554.mdx new file mode 100644 index 0000000..368c04f --- /dev/null +++ b/.history/posts/example-post_20220611193554.mdx @@ -0,0 +1,84 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 1 - Общий вид игрового поля + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611193605.mdx b/.history/posts/example-post_20220611193605.mdx new file mode 100644 index 0000000..7f85e1a --- /dev/null +++ b/.history/posts/example-post_20220611193605.mdx @@ -0,0 +1,84 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 1 - Общий вид игрового поля + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611193704.mdx b/.history/posts/example-post_20220611193704.mdx new file mode 100644 index 0000000..8c25e5c --- /dev/null +++ b/.history/posts/example-post_20220611193704.mdx @@ -0,0 +1,85 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля +Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611193712.mdx b/.history/posts/example-post_20220611193712.mdx new file mode 100644 index 0000000..0cf456a --- /dev/null +++ b/.history/posts/example-post_20220611193712.mdx @@ -0,0 +1,85 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611193724.mdx b/.history/posts/example-post_20220611193724.mdx new file mode 100644 index 0000000..7b526ae --- /dev/null +++ b/.history/posts/example-post_20220611193724.mdx @@ -0,0 +1,87 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+ + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611193809.mdx b/.history/posts/example-post_20220611193809.mdx new file mode 100644 index 0000000..83ff798 --- /dev/null +++ b/.history/posts/example-post_20220611193809.mdx @@ -0,0 +1,87 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611193841.mdx b/.history/posts/example-post_20220611193841.mdx new file mode 100644 index 0000000..89163d2 --- /dev/null +++ b/.history/posts/example-post_20220611193841.mdx @@ -0,0 +1,91 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+ +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611194055.mdx b/.history/posts/example-post_20220611194055.mdx new file mode 100644 index 0000000..c1ac90b --- /dev/null +++ b/.history/posts/example-post_20220611194055.mdx @@ -0,0 +1,101 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611194058.mdx b/.history/posts/example-post_20220611194058.mdx new file mode 100644 index 0000000..7ffb818 --- /dev/null +++ b/.history/posts/example-post_20220611194058.mdx @@ -0,0 +1,101 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611194115.mdx b/.history/posts/example-post_20220611194115.mdx new file mode 100644 index 0000000..0327e17 --- /dev/null +++ b/.history/posts/example-post_20220611194115.mdx @@ -0,0 +1,101 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611194201.mdx b/.history/posts/example-post_20220611194201.mdx new file mode 100644 index 0000000..2c45c04 --- /dev/null +++ b/.history/posts/example-post_20220611194201.mdx @@ -0,0 +1,106 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611194242.mdx b/.history/posts/example-post_20220611194242.mdx new file mode 100644 index 0000000..815f9ff --- /dev/null +++ b/.history/posts/example-post_20220611194242.mdx @@ -0,0 +1,112 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1. СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611194450.mdx b/.history/posts/example-post_20220611194450.mdx new file mode 100644 index 0000000..7e17175 --- /dev/null +++ b/.history/posts/example-post_20220611194450.mdx @@ -0,0 +1,126 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1. СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия: ** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. + +

+Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611194510.mdx b/.history/posts/example-post_20220611194510.mdx new file mode 100644 index 0000000..988edaf --- /dev/null +++ b/.history/posts/example-post_20220611194510.mdx @@ -0,0 +1,126 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1. СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. + +

+Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611195346.mdx b/.history/posts/example-post_20220611195346.mdx new file mode 100644 index 0000000..a8f092d --- /dev/null +++ b/.history/posts/example-post_20220611195346.mdx @@ -0,0 +1,141 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1. СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ • Реплику и статуэтку нельзя складывать в стопку. + • Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + • Реплика представляет собой куб со стороной 60 мм. + • Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + • Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + • Статуэтка, построенная командой, имеет следующие ограничения по размерам: + ◦ Она должна помещаться в кубе со стороной 120 мм. + ◦ Она должна быть больше, чем куб со стороной 60 мм. + ◦ Вес статуэтки не должен превышать 600 г. + • Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + • Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + • Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + • Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611195511.mdx b/.history/posts/example-post_20220611195511.mdx new file mode 100644 index 0000000..e75b6de --- /dev/null +++ b/.history/posts/example-post_20220611195511.mdx @@ -0,0 +1,141 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1. СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611195539.mdx b/.history/posts/example-post_20220611195539.mdx new file mode 100644 index 0000000..c52606b --- /dev/null +++ b/.history/posts/example-post_20220611195539.mdx @@ -0,0 +1,141 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1. СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611195720.mdx b/.history/posts/example-post_20220611195720.mdx new file mode 100644 index 0000000..6ed173b --- /dev/null +++ b/.history/posts/example-post_20220611195720.mdx @@ -0,0 +1,155 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1. СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611195753.mdx b/.history/posts/example-post_20220611195753.mdx new file mode 100644 index 0000000..c01e6f2 --- /dev/null +++ b/.history/posts/example-post_20220611195753.mdx @@ -0,0 +1,156 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1. СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611195919.mdx b/.history/posts/example-post_20220611195919.mdx new file mode 100644 index 0000000..f8cf23f --- /dev/null +++ b/.history/posts/example-post_20220611195919.mdx @@ -0,0 +1,159 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611200026.mdx b/.history/posts/example-post_20220611200026.mdx new file mode 100644 index 0000000..9c44cc3 --- /dev/null +++ b/.history/posts/example-post_20220611200026.mdx @@ -0,0 +1,165 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 5.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611200322.mdx b/.history/posts/example-post_20220611200322.mdx new file mode 100644 index 0000000..495634f --- /dev/null +++ b/.history/posts/example-post_20220611200322.mdx @@ -0,0 +1,182 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 5.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611200436.mdx b/.history/posts/example-post_20220611200436.mdx new file mode 100644 index 0000000..d1461e0 --- /dev/null +++ b/.history/posts/example-post_20220611200436.mdx @@ -0,0 +1,184 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611200519.mdx b/.history/posts/example-post_20220611200519.mdx new file mode 100644 index 0000000..5880104 --- /dev/null +++ b/.history/posts/example-post_20220611200519.mdx @@ -0,0 +1,188 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611200745.mdx b/.history/posts/example-post_20220611200745.mdx new file mode 100644 index 0000000..ddfc7da --- /dev/null +++ b/.history/posts/example-post_20220611200745.mdx @@ -0,0 +1,199 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** + * После окончания матча робот должен быть остановлен в собственном лагере. +**Ограничения:** + * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +#### 4.3.2 Баллы + * 20 баллов, если робот команды находятся в одной из зон лагере; + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611200839.mdx b/.history/posts/example-post_20220611200839.mdx new file mode 100644 index 0000000..44d4e05 --- /dev/null +++ b/.history/posts/example-post_20220611200839.mdx @@ -0,0 +1,199 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

* Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря.

+#### 4.3.2 Баллы +

* 20 баллов, если робот команды находятся в одной из зон лагере;

+ +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611200855.mdx b/.history/posts/example-post_20220611200855.mdx new file mode 100644 index 0000000..44d4e05 --- /dev/null +++ b/.history/posts/example-post_20220611200855.mdx @@ -0,0 +1,199 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

* Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря.

+#### 4.3.2 Баллы +

* 20 баллов, если робот команды находятся в одной из зон лагере;

+ +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611201506.mdx b/.history/posts/example-post_20220611201506.mdx new file mode 100644 index 0000000..6708ef4 --- /dev/null +++ b/.history/posts/example-post_20220611201506.mdx @@ -0,0 +1,243 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

* Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря.

+#### 4.3.2 Баллы +

* 20 баллов, если робот команды находятся в одной из зон лагере;

+## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

* Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

* Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат.

+ +

Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований.

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях.

+

Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611201530.mdx b/.history/posts/example-post_20220611201530.mdx new file mode 100644 index 0000000..e557bd7 --- /dev/null +++ b/.history/posts/example-post_20220611201530.mdx @@ -0,0 +1,245 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

* Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря.

+#### 4.3.2 Баллы +

* 20 баллов, если робот команды находятся в одной из зон лагере;

+## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

* Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

* Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат.

+ +

Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220611201535.mdx b/.history/posts/example-post_20220611201535.mdx new file mode 100644 index 0000000..ac45756 --- /dev/null +++ b/.history/posts/example-post_20220611201535.mdx @@ -0,0 +1,245 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

* Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря.

+#### 4.3.2 Баллы +

* 20 баллов, если робот команды находятся в одной из зон лагере;

+## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

* Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

* Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+

Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612065902.mdx b/.history/posts/example-post_20220612065902.mdx new file mode 100644 index 0000000..ac45756 --- /dev/null +++ b/.history/posts/example-post_20220612065902.mdx @@ -0,0 +1,245 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

* Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря.

+#### 4.3.2 Баллы +

* 20 баллов, если робот команды находятся в одной из зон лагере;

+## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

* Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

* Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+

Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612071421.mdx b/.history/posts/example-post_20220612071421.mdx new file mode 100644 index 0000000..5b1af2b --- /dev/null +++ b/.history/posts/example-post_20220612071421.mdx @@ -0,0 +1,245 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

* Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря.

+#### 4.3.2 Баллы +

* 20 баллов, если робот команды находятся в одной из зон лагере;

+## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

* Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

* Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+

Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612071432.mdx b/.history/posts/example-post_20220612071432.mdx new file mode 100644 index 0000000..2aba0b0 --- /dev/null +++ b/.history/posts/example-post_20220612071432.mdx @@ -0,0 +1,245 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

* Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря.

+#### 4.3.2 Баллы +

* 20 баллов, если робот команды находятся в одной из зон лагере;

+## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

* Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения + * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! + +### 5.3 Баллы +

Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+

Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612071450.mdx b/.history/posts/example-post_20220612071450.mdx new file mode 100644 index 0000000..11d94ec --- /dev/null +++ b/.history/posts/example-post_20220612071450.mdx @@ -0,0 +1,245 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

* Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря.

+#### 4.3.2 Баллы +

* 20 баллов, если робот команды находятся в одной из зон лагере;

+## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов + * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). + +### 5.2 Действия и ограничения + * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! + +### 5.3 Баллы +

Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+

Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612071520.mdx b/.history/posts/example-post_20220612071520.mdx new file mode 100644 index 0000000..7f18085 --- /dev/null +++ b/.history/posts/example-post_20220612071520.mdx @@ -0,0 +1,238 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+ + +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов + +

* Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

* Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+

Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612071533.mdx b/.history/posts/example-post_20220612071533.mdx new file mode 100644 index 0000000..d27ff38 --- /dev/null +++ b/.history/posts/example-post_20220612071533.mdx @@ -0,0 +1,246 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

* Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря.

+#### 4.3.2 Баллы +

* 20 баллов, если робот команды находятся в одной из зон лагере;

+ + + +

* Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

* Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+

Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612071544.mdx b/.history/posts/example-post_20220612071544.mdx new file mode 100644 index 0000000..40a2f8c --- /dev/null +++ b/.history/posts/example-post_20220612071544.mdx @@ -0,0 +1,242 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

* Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря.

+#### 4.3.2 Баллы +

* 20 баллов, если робот команды находятся в одной из зон лагере;

+ + +### 5.2 Действия и ограничения +

* Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+

Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612071613.mdx b/.history/posts/example-post_20220612071613.mdx new file mode 100644 index 0000000..6e9245e --- /dev/null +++ b/.history/posts/example-post_20220612071613.mdx @@ -0,0 +1,213 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

* Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря.

+#### 4.3.2 Баллы +

* 20 баллов, если робот команды находятся в одной из зон лагере;

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов + + + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612071627.mdx b/.history/posts/example-post_20220612071627.mdx new file mode 100644 index 0000000..382e734 --- /dev/null +++ b/.history/posts/example-post_20220612071627.mdx @@ -0,0 +1,234 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

* Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря.

+#### 4.3.2 Баллы +

* 20 баллов, если робот команды находятся в одной из зон лагере;

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов + +

* Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

* Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ + + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612071638.mdx b/.history/posts/example-post_20220612071638.mdx new file mode 100644 index 0000000..6fb2639 --- /dev/null +++ b/.history/posts/example-post_20220612071638.mdx @@ -0,0 +1,225 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

* Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря.

+#### 4.3.2 Баллы +

* 20 баллов, если робот команды находятся в одной из зон лагере;

+ + + +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+

Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612071703.mdx b/.history/posts/example-post_20220612071703.mdx new file mode 100644 index 0000000..f8bdc1e --- /dev/null +++ b/.history/posts/example-post_20220612071703.mdx @@ -0,0 +1,211 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

* Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря.

+#### 4.3.2 Баллы +

* 20 баллов, если робот команды находятся в одной из зон лагере;

+ + + + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612071714.mdx b/.history/posts/example-post_20220612071714.mdx new file mode 100644 index 0000000..e345739 --- /dev/null +++ b/.history/posts/example-post_20220612071714.mdx @@ -0,0 +1,235 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

* Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря.

+#### 4.3.2 Баллы +

* 20 баллов, если робот команды находятся в одной из зон лагере;

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов + +

* Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

* Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ + + + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612071723.mdx b/.history/posts/example-post_20220612071723.mdx new file mode 100644 index 0000000..0102308 --- /dev/null +++ b/.history/posts/example-post_20220612071723.mdx @@ -0,0 +1,240 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

* Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря.

+#### 4.3.2 Баллы +

* 20 баллов, если робот команды находятся в одной из зон лагере;

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов + +

* Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

* Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+ + +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+

Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612071731.mdx b/.history/posts/example-post_20220612071731.mdx new file mode 100644 index 0000000..b70c411 --- /dev/null +++ b/.history/posts/example-post_20220612071731.mdx @@ -0,0 +1,239 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

* Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря.

+#### 4.3.2 Баллы +

* 20 баллов, если робот команды находятся в одной из зон лагере;

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов + +

* Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+ +### 5.3 Баллы +

Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+

Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612071739.mdx b/.history/posts/example-post_20220612071739.mdx new file mode 100644 index 0000000..40a2f8c --- /dev/null +++ b/.history/posts/example-post_20220612071739.mdx @@ -0,0 +1,242 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

* Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря.

+#### 4.3.2 Баллы +

* 20 баллов, если робот команды находятся в одной из зон лагере;

+ + +### 5.2 Действия и ограничения +

* Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+

Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612071747.mdx b/.history/posts/example-post_20220612071747.mdx new file mode 100644 index 0000000..6672484 --- /dev/null +++ b/.history/posts/example-post_20220612071747.mdx @@ -0,0 +1,226 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

* Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря.

+#### 4.3.2 Баллы +

* 20 баллов, если робот команды находятся в одной из зон лагере;

+ + + + +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+

Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612071803.mdx b/.history/posts/example-post_20220612071803.mdx new file mode 100644 index 0000000..93f084d --- /dev/null +++ b/.history/posts/example-post_20220612071803.mdx @@ -0,0 +1,242 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

* Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря.

+#### 4.3.2 Баллы +

* 20 баллов, если робот команды находятся в одной из зон лагере.

+ + +### 5.2 Действия и ограничения +

* Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+

Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612071837.mdx b/.history/posts/example-post_20220612071837.mdx new file mode 100644 index 0000000..c07a2ec --- /dev/null +++ b/.history/posts/example-post_20220612071837.mdx @@ -0,0 +1,246 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

* Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря.

+#### 4.3.2 Баллы +

* 20 баллов, если робот команды находятся в одной из зон лагере;

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

* Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

* Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат.

+ +

Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612071957.mdx b/.history/posts/example-post_20220612071957.mdx new file mode 100644 index 0000000..efefa62 --- /dev/null +++ b/.history/posts/example-post_20220612071957.mdx @@ -0,0 +1,250 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

* Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

* Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат.

+ +

Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612072012.mdx b/.history/posts/example-post_20220612072012.mdx new file mode 100644 index 0000000..2013230 --- /dev/null +++ b/.history/posts/example-post_20220612072012.mdx @@ -0,0 +1,251 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

* Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат.

+ +

Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612072030.mdx b/.history/posts/example-post_20220612072030.mdx new file mode 100644 index 0000000..148434d --- /dev/null +++ b/.history/posts/example-post_20220612072030.mdx @@ -0,0 +1,252 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат.

+ +

Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612072049.mdx b/.history/posts/example-post_20220612072049.mdx new file mode 100644 index 0000000..e2d8b3d --- /dev/null +++ b/.history/posts/example-post_20220612072049.mdx @@ -0,0 +1,253 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат.

+ +

Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612072208.mdx b/.history/posts/example-post_20220612072208.mdx new file mode 100644 index 0000000..cf0aabe --- /dev/null +++ b/.history/posts/example-post_20220612072208.mdx @@ -0,0 +1,258 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ + + +9 РОБОТ +9.1 ОБЩИЕ ПОЛОЖЕНИЯ +Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски +Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). +Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. +Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612072350.mdx b/.history/posts/example-post_20220612072350.mdx new file mode 100644 index 0000000..4db04f7 --- /dev/null +++ b/.history/posts/example-post_20220612072350.mdx @@ -0,0 +1,261 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 8 РОБОТ +### 8.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+ + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612072440.mdx b/.history/posts/example-post_20220612072440.mdx new file mode 100644 index 0000000..63ef7bf --- /dev/null +++ b/.history/posts/example-post_20220612072440.mdx @@ -0,0 +1,261 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+ + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612072716.mdx b/.history/posts/example-post_20220612072716.mdx new file mode 100644 index 0000000..f78d3d6 --- /dev/null +++ b/.history/posts/example-post_20220612072716.mdx @@ -0,0 +1,274 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612072723.mdx b/.history/posts/example-post_20220612072723.mdx new file mode 100644 index 0000000..c81f7f4 --- /dev/null +++ b/.history/posts/example-post_20220612072723.mdx @@ -0,0 +1,274 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612072739.mdx b/.history/posts/example-post_20220612072739.mdx new file mode 100644 index 0000000..ead1ea4 --- /dev/null +++ b/.history/posts/example-post_20220612072739.mdx @@ -0,0 +1,274 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612072756.mdx b/.history/posts/example-post_20220612072756.mdx new file mode 100644 index 0000000..16fdef2 --- /dev/null +++ b/.history/posts/example-post_20220612072756.mdx @@ -0,0 +1,274 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612072804.mdx b/.history/posts/example-post_20220612072804.mdx new file mode 100644 index 0000000..1ad41ba --- /dev/null +++ b/.history/posts/example-post_20220612072804.mdx @@ -0,0 +1,274 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612072811.mdx b/.history/posts/example-post_20220612072811.mdx new file mode 100644 index 0000000..01a5708 --- /dev/null +++ b/.history/posts/example-post_20220612072811.mdx @@ -0,0 +1,274 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612072858.mdx b/.history/posts/example-post_20220612072858.mdx new file mode 100644 index 0000000..a92fa8b --- /dev/null +++ b/.history/posts/example-post_20220612072858.mdx @@ -0,0 +1,281 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612073318.mdx b/.history/posts/example-post_20220612073318.mdx new file mode 100644 index 0000000..4f29f7e --- /dev/null +++ b/.history/posts/example-post_20220612073318.mdx @@ -0,0 +1,397 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 12. ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +13. ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +Стартовый шнур робота: +В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок. + + +14. СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). +Эти системы должны быть полностью интегрированы в робота. +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. + +15. БЕЗОПАСНОСТЬ +15.1 Общие положения +Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. + +16. ПОДГОТОВКА К МАТЧУ +Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. +Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды! + + +17. МАТЧ +После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. Продолжительность одно матча 100 секунд. +Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча. + +18. СИСТЕМА БАЛЛОВ +18.1 Выезд из лагеря: + • 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; +18.1 Возвращение на место в лагерь + • 20 баллов, если один робот команды находятся в лагере; +18.2 Сохранение и выставление статуэтки + • 2 балла за установку статуэтки на пьедестал во время подготовки; + • 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + • 10 баллов, если статуэтка находится на пьедестале в конце игры; + • 15 баллов, если статуэтка находится в витрине в конце игры; +18.3 Витрина + • 2 балла за установку витрины во время подготовки; + • 5 дополнительных баллов, если витрина активирована во время игры; +18.4 Скорость выполнения задания + • 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +18.5 Оценка производительности +Оценка основана на предыдущих действиях +Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница + • Баллы – набранные во время матча баллы за обычные задания. + • Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + • Бонус прибавляется к баллам команды + • Отрицательный бонус округляется до 0. + • Нулевое число баллов не может приносить бонуса. + • Бонус за «недисквалификацию» не учитывается в прогнозе + • Штрафы не учитываются в прогнозе +ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается. + +18.5 Штрафы +Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. +Отрицательный счет округляется до 0. +Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. Судейский комитет также будет обращать внимание на штрафы, накопленные командами в течение отборочных региональных и / или национальных турах соревнований. + +18.6 Бонусные баллы +1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +18.7 Случаи дисквалификации +Баллы дисквалифицированной команды приравниваются к нулю. + +19. СОРЕВНОВАНИЯ +19 ДОПУСК К СОРЕВНОВАНИЯМ +19.1 СТАТИЧЕСКАЯ ПРОВЕРКА +Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +19.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +19.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке +Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. + +19.4 КВАЛИФИКАЦИОННЫЙ ТУР +Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612073734.mdx b/.history/posts/example-post_20220612073734.mdx new file mode 100644 index 0000000..be7e1f2 --- /dev/null +++ b/.history/posts/example-post_20220612073734.mdx @@ -0,0 +1,407 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +14. СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). +Эти системы должны быть полностью интегрированы в робота. +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. + +15. БЕЗОПАСНОСТЬ +15.1 Общие положения +Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. + +16. ПОДГОТОВКА К МАТЧУ +Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. +Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды! + + +17. МАТЧ +После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. Продолжительность одно матча 100 секунд. +Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча. + +18. СИСТЕМА БАЛЛОВ +18.1 Выезд из лагеря: + • 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; +18.1 Возвращение на место в лагерь + • 20 баллов, если один робот команды находятся в лагере; +18.2 Сохранение и выставление статуэтки + • 2 балла за установку статуэтки на пьедестал во время подготовки; + • 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + • 10 баллов, если статуэтка находится на пьедестале в конце игры; + • 15 баллов, если статуэтка находится в витрине в конце игры; +18.3 Витрина + • 2 балла за установку витрины во время подготовки; + • 5 дополнительных баллов, если витрина активирована во время игры; +18.4 Скорость выполнения задания + • 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +18.5 Оценка производительности +Оценка основана на предыдущих действиях +Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница + • Баллы – набранные во время матча баллы за обычные задания. + • Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + • Бонус прибавляется к баллам команды + • Отрицательный бонус округляется до 0. + • Нулевое число баллов не может приносить бонуса. + • Бонус за «недисквалификацию» не учитывается в прогнозе + • Штрафы не учитываются в прогнозе +ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается. + +18.5 Штрафы +Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. +Отрицательный счет округляется до 0. +Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. Судейский комитет также будет обращать внимание на штрафы, накопленные командами в течение отборочных региональных и / или национальных турах соревнований. + +18.6 Бонусные баллы +1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +18.7 Случаи дисквалификации +Баллы дисквалифицированной команды приравниваются к нулю. + +19. СОРЕВНОВАНИЯ +19 ДОПУСК К СОРЕВНОВАНИЯМ +19.1 СТАТИЧЕСКАЯ ПРОВЕРКА +Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +19.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +19.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке +Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. + +19.4 КВАЛИФИКАЦИОННЫЙ ТУР +Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612074053.mdx b/.history/posts/example-post_20220612074053.mdx new file mode 100644 index 0000000..1a7486c --- /dev/null +++ b/.history/posts/example-post_20220612074053.mdx @@ -0,0 +1,416 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13. ПОДГОТОВКА К МАТЧУ +

Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. +**Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ + +17. МАТЧ +После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. Продолжительность одно матча 100 секунд. +Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча. + +18. СИСТЕМА БАЛЛОВ +18.1 Выезд из лагеря: + • 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; +18.1 Возвращение на место в лагерь + • 20 баллов, если один робот команды находятся в лагере; +18.2 Сохранение и выставление статуэтки + • 2 балла за установку статуэтки на пьедестал во время подготовки; + • 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + • 10 баллов, если статуэтка находится на пьедестале в конце игры; + • 15 баллов, если статуэтка находится в витрине в конце игры; +18.3 Витрина + • 2 балла за установку витрины во время подготовки; + • 5 дополнительных баллов, если витрина активирована во время игры; +18.4 Скорость выполнения задания + • 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +18.5 Оценка производительности +Оценка основана на предыдущих действиях +Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница + • Баллы – набранные во время матча баллы за обычные задания. + • Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + • Бонус прибавляется к баллам команды + • Отрицательный бонус округляется до 0. + • Нулевое число баллов не может приносить бонуса. + • Бонус за «недисквалификацию» не учитывается в прогнозе + • Штрафы не учитываются в прогнозе +ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается. + +18.5 Штрафы +Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. +Отрицательный счет округляется до 0. +Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. Судейский комитет также будет обращать внимание на штрафы, накопленные командами в течение отборочных региональных и / или национальных турах соревнований. + +18.6 Бонусные баллы +1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +18.7 Случаи дисквалификации +Баллы дисквалифицированной команды приравниваются к нулю. + +19. СОРЕВНОВАНИЯ +19 ДОПУСК К СОРЕВНОВАНИЯМ +19.1 СТАТИЧЕСКАЯ ПРОВЕРКА +Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +19.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +19.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке +Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. + +19.4 КВАЛИФИКАЦИОННЫЙ ТУР +Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220612074258.mdx b/.history/posts/example-post_20220612074258.mdx new file mode 100644 index 0000000..28dd677 --- /dev/null +++ b/.history/posts/example-post_20220612074258.mdx @@ -0,0 +1,417 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13. ПОДГОТОВКА К МАТЧУ +

Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. +**Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ + +## 14. МАТЧ +

+После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. Продолжительность одно матча 100 секунд. +Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча. + +18. СИСТЕМА БАЛЛОВ +18.1 Выезд из лагеря: + • 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; +18.1 Возвращение на место в лагерь + • 20 баллов, если один робот команды находятся в лагере; +18.2 Сохранение и выставление статуэтки + • 2 балла за установку статуэтки на пьедестал во время подготовки; + • 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + • 10 баллов, если статуэтка находится на пьедестале в конце игры; + • 15 баллов, если статуэтка находится в витрине в конце игры; +18.3 Витрина + • 2 балла за установку витрины во время подготовки; + • 5 дополнительных баллов, если витрина активирована во время игры; +18.4 Скорость выполнения задания + • 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +18.5 Оценка производительности +Оценка основана на предыдущих действиях +Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница + • Баллы – набранные во время матча баллы за обычные задания. + • Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + • Бонус прибавляется к баллам команды + • Отрицательный бонус округляется до 0. + • Нулевое число баллов не может приносить бонуса. + • Бонус за «недисквалификацию» не учитывается в прогнозе + • Штрафы не учитываются в прогнозе +ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается. + +18.5 Штрафы +Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. +Отрицательный счет округляется до 0. +Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. Судейский комитет также будет обращать внимание на штрафы, накопленные командами в течение отборочных региональных и / или национальных турах соревнований. + +18.6 Бонусные баллы +1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +18.7 Случаи дисквалификации +Баллы дисквалифицированной команды приравниваются к нулю. + +19. СОРЕВНОВАНИЯ +19 ДОПУСК К СОРЕВНОВАНИЯМ +19.1 СТАТИЧЕСКАЯ ПРОВЕРКА +Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +19.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +19.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке +Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. + +19.4 КВАЛИФИКАЦИОННЫЙ ТУР +Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613082601.mdx b/.history/posts/example-post_20220613082601.mdx new file mode 100644 index 0000000..b690867 --- /dev/null +++ b/.history/posts/example-post_20220613082601.mdx @@ -0,0 +1,418 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13. ПОДГОТОВКА К МАТЧУ +

Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. +**Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ + +## 14. МАТЧ +

+После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. Продолжительность одно матча 100 секунд. +Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча. + +18. СИСТЕМА БАЛЛОВ +18.1 Выезд из лагеря: + • 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; +18.1 Возвращение на место в лагерь + • 20 баллов, если один робот команды находятся в лагере; +18.2 Сохранение и выставление статуэтки + • 2 балла за установку статуэтки на пьедестал во время подготовки; + • 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + • 10 баллов, если статуэтка находится на пьедестале в конце игры; + • 15 баллов, если статуэтка находится в витрине в конце игры; +18.3 Витрина + • 2 балла за установку витрины во время подготовки; + • 5 дополнительных баллов, если витрина активирована во время игры; +18.4 Скорость выполнения задания + • 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +18.5 Оценка производительности +Оценка основана на предыдущих действиях +Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница + • Баллы – набранные во время матча баллы за обычные задания. + • Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + • Бонус прибавляется к баллам команды + • Отрицательный бонус округляется до 0. + • Нулевое число баллов не может приносить бонуса. + • Бонус за «недисквалификацию» не учитывается в прогнозе + • Штрафы не учитываются в прогнозе +ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается. + +18.5 Штрафы +Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. +Отрицательный счет округляется до 0. +Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. Судейский комитет также будет обращать внимание на штрафы, накопленные командами в течение отборочных региональных и / или национальных турах соревнований. + +18.6 Бонусные баллы +1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +18.7 Случаи дисквалификации +Баллы дисквалифицированной команды приравниваются к нулю. + +19. СОРЕВНОВАНИЯ +19 ДОПУСК К СОРЕВНОВАНИЯМ +19.1 СТАТИЧЕСКАЯ ПРОВЕРКА +Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +19.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +19.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке +Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. + +19.4 КВАЛИФИКАЦИОННЫЙ ТУР +Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613082618.mdx b/.history/posts/example-post_20220613082618.mdx new file mode 100644 index 0000000..fb26b7b --- /dev/null +++ b/.history/posts/example-post_20220613082618.mdx @@ -0,0 +1,419 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13. ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ + +## 14. МАТЧ +

+После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. Продолжительность одно матча 100 секунд. +Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча. + +18. СИСТЕМА БАЛЛОВ +18.1 Выезд из лагеря: + • 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; +18.1 Возвращение на место в лагерь + • 20 баллов, если один робот команды находятся в лагере; +18.2 Сохранение и выставление статуэтки + • 2 балла за установку статуэтки на пьедестал во время подготовки; + • 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + • 10 баллов, если статуэтка находится на пьедестале в конце игры; + • 15 баллов, если статуэтка находится в витрине в конце игры; +18.3 Витрина + • 2 балла за установку витрины во время подготовки; + • 5 дополнительных баллов, если витрина активирована во время игры; +18.4 Скорость выполнения задания + • 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +18.5 Оценка производительности +Оценка основана на предыдущих действиях +Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница + • Баллы – набранные во время матча баллы за обычные задания. + • Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + • Бонус прибавляется к баллам команды + • Отрицательный бонус округляется до 0. + • Нулевое число баллов не может приносить бонуса. + • Бонус за «недисквалификацию» не учитывается в прогнозе + • Штрафы не учитываются в прогнозе +ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается. + +18.5 Штрафы +Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. +Отрицательный счет округляется до 0. +Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. Судейский комитет также будет обращать внимание на штрафы, накопленные командами в течение отборочных региональных и / или национальных турах соревнований. + +18.6 Бонусные баллы +1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +18.7 Случаи дисквалификации +Баллы дисквалифицированной команды приравниваются к нулю. + +19. СОРЕВНОВАНИЯ +19 ДОПУСК К СОРЕВНОВАНИЯМ +19.1 СТАТИЧЕСКАЯ ПРОВЕРКА +Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +19.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +19.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке +Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. + +19.4 КВАЛИФИКАЦИОННЫЙ ТУР +Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613082801.mdx b/.history/posts/example-post_20220613082801.mdx new file mode 100644 index 0000000..51d8e09 --- /dev/null +++ b/.history/posts/example-post_20220613082801.mdx @@ -0,0 +1,426 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13. ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ + +## 14. МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. Продолжительность одно матча 100 секунд. +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои привод. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча. +

+18. СИСТЕМА БАЛЛОВ +18.1 Выезд из лагеря: + • 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; +18.1 Возвращение на место в лагерь + • 20 баллов, если один робот команды находятся в лагере; +18.2 Сохранение и выставление статуэтки + • 2 балла за установку статуэтки на пьедестал во время подготовки; + • 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + • 10 баллов, если статуэтка находится на пьедестале в конце игры; + • 15 баллов, если статуэтка находится в витрине в конце игры; +18.3 Витрина + • 2 балла за установку витрины во время подготовки; + • 5 дополнительных баллов, если витрина активирована во время игры; +18.4 Скорость выполнения задания + • 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +18.5 Оценка производительности +Оценка основана на предыдущих действиях +Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница + • Баллы – набранные во время матча баллы за обычные задания. + • Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + • Бонус прибавляется к баллам команды + • Отрицательный бонус округляется до 0. + • Нулевое число баллов не может приносить бонуса. + • Бонус за «недисквалификацию» не учитывается в прогнозе + • Штрафы не учитываются в прогнозе +ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается. + +18.5 Штрафы +Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. +Отрицательный счет округляется до 0. +Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. Судейский комитет также будет обращать внимание на штрафы, накопленные командами в течение отборочных региональных и / или национальных турах соревнований. + +18.6 Бонусные баллы +1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +18.7 Случаи дисквалификации +Баллы дисквалифицированной команды приравниваются к нулю. + +19. СОРЕВНОВАНИЯ +19 ДОПУСК К СОРЕВНОВАНИЯМ +19.1 СТАТИЧЕСКАЯ ПРОВЕРКА +Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +19.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +19.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке +Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. + +19.4 КВАЛИФИКАЦИОННЫЙ ТУР +Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613082837.mdx b/.history/posts/example-post_20220613082837.mdx new file mode 100644 index 0000000..16b99e8 --- /dev/null +++ b/.history/posts/example-post_20220613082837.mdx @@ -0,0 +1,426 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ + +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. Продолжительность одно матча 100 секунд. +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои привод +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча. +

+18. СИСТЕМА БАЛЛОВ +18.1 Выезд из лагеря: + • 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; +18.1 Возвращение на место в лагерь + • 20 баллов, если один робот команды находятся в лагере; +18.2 Сохранение и выставление статуэтки + • 2 балла за установку статуэтки на пьедестал во время подготовки; + • 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + • 10 баллов, если статуэтка находится на пьедестале в конце игры; + • 15 баллов, если статуэтка находится в витрине в конце игры; +18.3 Витрина + • 2 балла за установку витрины во время подготовки; + • 5 дополнительных баллов, если витрина активирована во время игры; +18.4 Скорость выполнения задания + • 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +18.5 Оценка производительности +Оценка основана на предыдущих действиях +Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница + • Баллы – набранные во время матча баллы за обычные задания. + • Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + • Бонус прибавляется к баллам команды + • Отрицательный бонус округляется до 0. + • Нулевое число баллов не может приносить бонуса. + • Бонус за «недисквалификацию» не учитывается в прогнозе + • Штрафы не учитываются в прогнозе +ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается. + +18.5 Штрафы +Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. +Отрицательный счет округляется до 0. +Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. Судейский комитет также будет обращать внимание на штрафы, накопленные командами в течение отборочных региональных и / или национальных турах соревнований. + +18.6 Бонусные баллы +1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +18.7 Случаи дисквалификации +Баллы дисквалифицированной команды приравниваются к нулю. + +19. СОРЕВНОВАНИЯ +19 ДОПУСК К СОРЕВНОВАНИЯМ +19.1 СТАТИЧЕСКАЯ ПРОВЕРКА +Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +19.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +19.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке +Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. + +19.4 КВАЛИФИКАЦИОННЫЙ ТУР +Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613082932.mdx b/.history/posts/example-post_20220613082932.mdx new file mode 100644 index 0000000..9f8b6a6 --- /dev/null +++ b/.history/posts/example-post_20220613082932.mdx @@ -0,0 +1,358 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ + + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613082955.mdx b/.history/posts/example-post_20220613082955.mdx new file mode 100644 index 0000000..ea64069 --- /dev/null +++ b/.history/posts/example-post_20220613082955.mdx @@ -0,0 +1,425 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. Продолжительность одно матча 100 секунд. +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои привод +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча. +

+18. СИСТЕМА БАЛЛОВ +18.1 Выезд из лагеря: + • 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; +18.1 Возвращение на место в лагерь + • 20 баллов, если один робот команды находятся в лагере; +18.2 Сохранение и выставление статуэтки + • 2 балла за установку статуэтки на пьедестал во время подготовки; + • 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + • 10 баллов, если статуэтка находится на пьедестале в конце игры; + • 15 баллов, если статуэтка находится в витрине в конце игры; +18.3 Витрина + • 2 балла за установку витрины во время подготовки; + • 5 дополнительных баллов, если витрина активирована во время игры; +18.4 Скорость выполнения задания + • 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +18.5 Оценка производительности +Оценка основана на предыдущих действиях +Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница + • Баллы – набранные во время матча баллы за обычные задания. + • Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + • Бонус прибавляется к баллам команды + • Отрицательный бонус округляется до 0. + • Нулевое число баллов не может приносить бонуса. + • Бонус за «недисквалификацию» не учитывается в прогнозе + • Штрафы не учитываются в прогнозе +ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается. + +18.5 Штрафы +Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. +Отрицательный счет округляется до 0. +Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. Судейский комитет также будет обращать внимание на штрафы, накопленные командами в течение отборочных региональных и / или национальных турах соревнований. + +18.6 Бонусные баллы +1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +18.7 Случаи дисквалификации +Баллы дисквалифицированной команды приравниваются к нулю. + +19. СОРЕВНОВАНИЯ +19 ДОПУСК К СОРЕВНОВАНИЯМ +19.1 СТАТИЧЕСКАЯ ПРОВЕРКА +Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +19.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +19.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке +Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. + +19.4 КВАЛИФИКАЦИОННЫЙ ТУР +Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. + + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613083028.mdx b/.history/posts/example-post_20220613083028.mdx new file mode 100644 index 0000000..138ecd9 --- /dev/null +++ b/.history/posts/example-post_20220613083028.mdx @@ -0,0 +1,354 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613083247.mdx b/.history/posts/example-post_20220613083247.mdx new file mode 100644 index 0000000..c6acd27 --- /dev/null +++ b/.history/posts/example-post_20220613083247.mdx @@ -0,0 +1,372 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 17 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613083808.mdx b/.history/posts/example-post_20220613083808.mdx new file mode 100644 index 0000000..756fc8f --- /dev/null +++ b/.history/posts/example-post_20220613083808.mdx @@ -0,0 +1,401 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + ** Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница ** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +** ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается. ** +

+Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613083829.mdx b/.history/posts/example-post_20220613083829.mdx new file mode 100644 index 0000000..2e9776d --- /dev/null +++ b/.history/posts/example-post_20220613083829.mdx @@ -0,0 +1,401 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + ** Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница ** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** +

+Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613083843.mdx b/.history/posts/example-post_20220613083843.mdx new file mode 100644 index 0000000..8a0bf9b --- /dev/null +++ b/.history/posts/example-post_20220613083843.mdx @@ -0,0 +1,402 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + ** Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница ** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613083904.mdx b/.history/posts/example-post_20220613083904.mdx new file mode 100644 index 0000000..575f6b9 --- /dev/null +++ b/.history/posts/example-post_20220613083904.mdx @@ -0,0 +1,402 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + **Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613084043.mdx b/.history/posts/example-post_20220613084043.mdx new file mode 100644 index 0000000..5fa8aeb --- /dev/null +++ b/.history/posts/example-post_20220613084043.mdx @@ -0,0 +1,410 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + **Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +## 18.5 Штрафы +

+ Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. Отрицательный счет округляется до 0. +

+

+ Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. +

+ +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613084211.mdx b/.history/posts/example-post_20220613084211.mdx new file mode 100644 index 0000000..df83107 --- /dev/null +++ b/.history/posts/example-post_20220613084211.mdx @@ -0,0 +1,419 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + **Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +### 15.6 Штрафы +

+ Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. Отрицательный счет округляется до 0. +

+

+ Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. +

+ +### 15.7 Бонусные баллы +

+ 1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +

+### 15.8 Случаи дисквалификации +

+ Баллы дисквалифицированной команды приравниваются к нулю. +

+ +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613084724.mdx b/.history/posts/example-post_20220613084724.mdx new file mode 100644 index 0000000..dd6c997 --- /dev/null +++ b/.history/posts/example-post_20220613084724.mdx @@ -0,0 +1,459 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + **Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +### 15.6 Штрафы +

+ Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. Отрицательный счет округляется до 0. +

+

+ Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. +

+ +### 15.7 Бонусные баллы +

+ 1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +

+### 15.8 Случаи дисквалификации +

+ Баллы дисквалифицированной команды приравниваются к нулю. +

+ +## 16 СОРЕВНОВАНИЯ +### 16.1 ДОПУСК К СОРЕВНОВАНИЯМ +#### 16.1.1 СТАТИЧЕСКАЯ ПРОВЕРКА +

+ Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +

+#### 16.1.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +

+ Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +

+#### 16.1.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +

+ В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке. +

+

+ Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. +

+ +### 16.2 КВАЛИФИКАЦИОННЫЙ ТУР +

+ Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +

+

+ Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +

+

+ По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +

+

+ В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. +

+ +### 19.2 ФИНАЛЬНАЯ СТАДИЯ +

+ После квалификационных раундов первые 4, 8 или 16 команд (в зависимости от числа команд, прошедших процедуру допуска к соревнованиям) будут участвовать в финальном туре в соответствии с рис. ниже. +

+

+ Матчи финального тура играются «на вылет», организаторы в праве изменить систему проведения финальной стадии. +

+ +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613084749.mdx b/.history/posts/example-post_20220613084749.mdx new file mode 100644 index 0000000..da69973 --- /dev/null +++ b/.history/posts/example-post_20220613084749.mdx @@ -0,0 +1,459 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + **Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +### 15.6 Штрафы +

+ Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. Отрицательный счет округляется до 0. +

+

+ Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. +

+ +### 15.7 Бонусные баллы +

+ 1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +

+### 15.8 Случаи дисквалификации +

+ Баллы дисквалифицированной команды приравниваются к нулю. +

+ +## 16 СОРЕВНОВАНИЯ +### 16.1 ДОПУСК К СОРЕВНОВАНИЯМ +#### 16.1.1 СТАТИЧЕСКАЯ ПРОВЕРКА +

+ Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +

+#### 16.1.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +

+ Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +

+#### 16.1.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +

+ В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке. +

+

+ Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. +

+ +### 16.2 КВАЛИФИКАЦИОННЫЙ ТУР +

+ Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +

+

+ Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +

+

+ По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +

+

+ В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. +

+ +### 16.3 ФИНАЛЬНАЯ СТАДИЯ +

+ После квалификационных раундов первые 4, 8 или 16 команд (в зависимости от числа команд, прошедших процедуру допуска к соревнованиям) будут участвовать в финальном туре в соответствии с рис. ниже. +

+

+ Матчи финального тура играются «на вылет», организаторы в праве изменить систему проведения финальной стадии. +

+ +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613085022.mdx b/.history/posts/example-post_20220613085022.mdx new file mode 100644 index 0000000..22882a8 --- /dev/null +++ b/.history/posts/example-post_20220613085022.mdx @@ -0,0 +1,473 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + **Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +### 15.6 Штрафы +

+ Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. Отрицательный счет округляется до 0. +

+

+ Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. +

+ +### 15.7 Бонусные баллы +

+ 1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +

+### 15.8 Случаи дисквалификации +

+ Баллы дисквалифицированной команды приравниваются к нулю. +

+ +## 16 СОРЕВНОВАНИЯ +### 16.1 ДОПУСК К СОРЕВНОВАНИЯМ +#### 16.1.1 СТАТИЧЕСКАЯ ПРОВЕРКА +

+ Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +

+#### 16.1.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +

+ Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +

+#### 16.1.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +

+ В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке. +

+

+ Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. +

+ +### 16.2 КВАЛИФИКАЦИОННЫЙ ТУР +

+ Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +

+

+ Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +

+

+ По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +

+

+ В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. +

+ +### 16.3 ФИНАЛЬНАЯ СТАДИЯ +

+ После квалификационных раундов первые 4, 8 или 16 команд (в зависимости от числа команд, прошедших процедуру допуска к соревнованиям) будут участвовать в финальном туре в соответствии с рис. ниже. +

+

+ Матчи финального тура играются «на вылет», организаторы в праве изменить систему проведения финальной стадии. +

+{`Рисунок +

+ В случае двойной дисквалификации, двойного поражения или ничьей, матч незамедлительно переигрывается; если результат повторной игры по-прежнему двойная дисквалификация, двойное поражение или ничья, победитель определяется в соответствии с очками, заработанными в течение квалификационных раундов. Матчи за первое место играются по системе «лучший из трёх». Команда подряд выигравшая 2 матча считается победителем. +

+

+ В этом случае будьте внимательны: команды должны позаботиться о том, чтобы их Автономным роботам хватило заряда батарей на все матчи до победы одной из команд! +

+ + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613085034.mdx b/.history/posts/example-post_20220613085034.mdx new file mode 100644 index 0000000..22882a8 --- /dev/null +++ b/.history/posts/example-post_20220613085034.mdx @@ -0,0 +1,473 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + **Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +### 15.6 Штрафы +

+ Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. Отрицательный счет округляется до 0. +

+

+ Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. +

+ +### 15.7 Бонусные баллы +

+ 1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +

+### 15.8 Случаи дисквалификации +

+ Баллы дисквалифицированной команды приравниваются к нулю. +

+ +## 16 СОРЕВНОВАНИЯ +### 16.1 ДОПУСК К СОРЕВНОВАНИЯМ +#### 16.1.1 СТАТИЧЕСКАЯ ПРОВЕРКА +

+ Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +

+#### 16.1.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +

+ Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +

+#### 16.1.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +

+ В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке. +

+

+ Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. +

+ +### 16.2 КВАЛИФИКАЦИОННЫЙ ТУР +

+ Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +

+

+ Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +

+

+ По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +

+

+ В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. +

+ +### 16.3 ФИНАЛЬНАЯ СТАДИЯ +

+ После квалификационных раундов первые 4, 8 или 16 команд (в зависимости от числа команд, прошедших процедуру допуска к соревнованиям) будут участвовать в финальном туре в соответствии с рис. ниже. +

+

+ Матчи финального тура играются «на вылет», организаторы в праве изменить систему проведения финальной стадии. +

+{`Рисунок +

+ В случае двойной дисквалификации, двойного поражения или ничьей, матч незамедлительно переигрывается; если результат повторной игры по-прежнему двойная дисквалификация, двойное поражение или ничья, победитель определяется в соответствии с очками, заработанными в течение квалификационных раундов. Матчи за первое место играются по системе «лучший из трёх». Команда подряд выигравшая 2 матча считается победителем. +

+

+ В этом случае будьте внимательны: команды должны позаботиться о том, чтобы их Автономным роботам хватило заряда батарей на все матчи до победы одной из команд! +

+ + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613085057.mdx b/.history/posts/example-post_20220613085057.mdx new file mode 100644 index 0000000..da41597 --- /dev/null +++ b/.history/posts/example-post_20220613085057.mdx @@ -0,0 +1,473 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + **Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +### 15.6 Штрафы +

+ Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. Отрицательный счет округляется до 0. +

+

+ Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. +

+ +### 15.7 Бонусные баллы +

+ 1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +

+### 15.8 Случаи дисквалификации +

+ Баллы дисквалифицированной команды приравниваются к нулю. +

+ +## 16 СОРЕВНОВАНИЯ +### 16.1 ДОПУСК К СОРЕВНОВАНИЯМ +#### 16.1.1 СТАТИЧЕСКАЯ ПРОВЕРКА +

+ Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +

+#### 16.1.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +

+ Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +

+#### 16.1.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +

+ В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке. +

+

+ Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. +

+ +### 16.2 КВАЛИФИКАЦИОННЫЙ ТУР +

+ Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +

+

+ Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +

+

+ По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +

+

+ В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. +

+ +### 16.3 ФИНАЛЬНАЯ СТАДИЯ +

+ После квалификационных раундов первые 4, 8 или 16 команд (в зависимости от числа команд, прошедших процедуру допуска к соревнованиям) будут участвовать в финальном туре в соответствии с рис. ниже. +

+

+ Матчи финального тура играются «на вылет», организаторы в праве изменить систему проведения финальной стадии. +

+{`Рисунок +

+ В случае двойной дисквалификации, двойного поражения или ничьей, матч незамедлительно переигрывается; если результат повторной игры по-прежнему двойная дисквалификация, двойное поражение или ничья, победитель определяется в соответствии с очками, заработанными в течение квалификационных раундов. Матчи за первое место играются по системе «лучший из трёх». Команда подряд выигравшая 2 матча считается победителем. +

+

+ В этом случае будьте внимательны: команды должны позаботиться о том, чтобы их Автономным роботам хватило заряда батарей на все матчи до победы одной из команд! +

+ + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613085108.mdx b/.history/posts/example-post_20220613085108.mdx new file mode 100644 index 0000000..1094336 --- /dev/null +++ b/.history/posts/example-post_20220613085108.mdx @@ -0,0 +1,473 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + **Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +### 15.6 Штрафы +

+ Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. Отрицательный счет округляется до 0. +

+

+ Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. +

+ +### 15.7 Бонусные баллы +

+ 1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +

+### 15.8 Случаи дисквалификации +

+ Баллы дисквалифицированной команды приравниваются к нулю. +

+ +## 16 СОРЕВНОВАНИЯ +### 16.1 ДОПУСК К СОРЕВНОВАНИЯМ +#### 16.1.1 СТАТИЧЕСКАЯ ПРОВЕРКА +

+ Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +

+#### 16.1.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +

+ Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +

+#### 16.1.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +

+ В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке. +

+

+ Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. +

+ +### 16.2 КВАЛИФИКАЦИОННЫЙ ТУР +

+ Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +

+

+ Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +

+

+ По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +

+

+ В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. +

+ +### 16.3 ФИНАЛЬНАЯ СТАДИЯ +

+ После квалификационных раундов первые 4, 8 или 16 команд (в зависимости от числа команд, прошедших процедуру допуска к соревнованиям) будут участвовать в финальном туре в соответствии с рис. ниже. +

+

+ Матчи финального тура играются «на вылет», организаторы в праве изменить систему проведения финальной стадии. +

+{`Рисунок +

+ В случае двойной дисквалификации, двойного поражения или ничьей, матч незамедлительно переигрывается; если результат повторной игры по-прежнему двойная дисквалификация, двойное поражение или ничья, победитель определяется в соответствии с очками, заработанными в течение квалификационных раундов. Матчи за первое место играются по системе «лучший из трёх». Команда подряд выигравшая 2 матча считается победителем. +

+

+ В этом случае будьте внимательны: команды должны позаботиться о том, чтобы их Автономным роботам хватило заряда батарей на все матчи до победы одной из команд! +

+ + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613085252.mdx b/.history/posts/example-post_20220613085252.mdx new file mode 100644 index 0000000..ea40fc9 --- /dev/null +++ b/.history/posts/example-post_20220613085252.mdx @@ -0,0 +1,479 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + **Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +### 15.6 Штрафы +

+ Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. Отрицательный счет округляется до 0. +

+

+ Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. +

+ +### 15.7 Бонусные баллы +

+ 1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +

+### 15.8 Случаи дисквалификации +

+ Баллы дисквалифицированной команды приравниваются к нулю. +

+ +## 16 СОРЕВНОВАНИЯ +### 16.1 ДОПУСК К СОРЕВНОВАНИЯМ +#### 16.1.1 СТАТИЧЕСКАЯ ПРОВЕРКА +

+ Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +

+#### 16.1.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +

+ Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +

+#### 16.1.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +

+ В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке. +

+

+ Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. +

+ +### 16.2 КВАЛИФИКАЦИОННЫЙ ТУР +

+ Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +

+

+ Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +

+

+ По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +

+

+ В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. +

+ +### 16.3 ФИНАЛЬНАЯ СТАДИЯ +

+ После квалификационных раундов первые 4, 8 или 16 команд (в зависимости от числа команд, прошедших процедуру допуска к соревнованиям) будут участвовать в финальном туре в соответствии с рис. ниже. +

+

+ Матчи финального тура играются «на вылет», организаторы в праве изменить систему проведения финальной стадии. +

+{`Рисунок +

+ В случае двойной дисквалификации, двойного поражения или ничьей, матч незамедлительно переигрывается; если результат повторной игры по-прежнему двойная дисквалификация, двойное поражение или ничья, победитель определяется в соответствии с очками, заработанными в течение квалификационных раундов. Матчи за первое место играются по системе «лучший из трёх». Команда подряд выигравшая 2 матча считается победителем. +

+

+ В этом случае будьте внимательны: команды должны позаботиться о том, чтобы их Автономным роботам хватило заряда батарей на все матчи до победы одной из команд! +

+ +## Приложение +### Выставочный зал + **Размеры:** + * Высота: 70 мм + * Ширина: 150 мм + * Длина: 400 мм + +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613085718.mdx b/.history/posts/example-post_20220613085718.mdx new file mode 100644 index 0000000..b475850 --- /dev/null +++ b/.history/posts/example-post_20220613085718.mdx @@ -0,0 +1,511 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + **Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +### 15.6 Штрафы +

+ Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. Отрицательный счет округляется до 0. +

+

+ Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. +

+ +### 15.7 Бонусные баллы +

+ 1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +

+### 15.8 Случаи дисквалификации +

+ Баллы дисквалифицированной команды приравниваются к нулю. +

+ +## 16 СОРЕВНОВАНИЯ +### 16.1 ДОПУСК К СОРЕВНОВАНИЯМ +#### 16.1.1 СТАТИЧЕСКАЯ ПРОВЕРКА +

+ Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +

+#### 16.1.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +

+ Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +

+#### 16.1.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +

+ В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке. +

+

+ Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. +

+ +### 16.2 КВАЛИФИКАЦИОННЫЙ ТУР +

+ Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +

+

+ Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +

+

+ По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +

+

+ В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. +

+ +### 16.3 ФИНАЛЬНАЯ СТАДИЯ +

+ После квалификационных раундов первые 4, 8 или 16 команд (в зависимости от числа команд, прошедших процедуру допуска к соревнованиям) будут участвовать в финальном туре в соответствии с рис. ниже. +

+

+ Матчи финального тура играются «на вылет», организаторы в праве изменить систему проведения финальной стадии. +

+{`Рисунок +

+ В случае двойной дисквалификации, двойного поражения или ничьей, матч незамедлительно переигрывается; если результат повторной игры по-прежнему двойная дисквалификация, двойное поражение или ничья, победитель определяется в соответствии с очками, заработанными в течение квалификационных раундов. Матчи за первое место играются по системе «лучший из трёх». Команда подряд выигравшая 2 матча считается победителем. +

+

+ В этом случае будьте внимательны: команды должны позаботиться о том, чтобы их Автономным роботам хватило заряда батарей на все матчи до победы одной из команд! +

+ +## Приложение +### Выставочный зал + **Размеры:** + * Высота: 70 мм + * Ширина: 150 мм + * Длина: 400 мм +{`Рисунок +{`Рисунок +### Пьедестал: + **Размеры:** + * Высота: 90 мм + * Ширина: 150 мм + * Длина: 400 мм +{`Рисунок +{`Рисунок +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613085818.mdx b/.history/posts/example-post_20220613085818.mdx new file mode 100644 index 0000000..90aa1d7 --- /dev/null +++ b/.history/posts/example-post_20220613085818.mdx @@ -0,0 +1,513 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + **Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +### 15.6 Штрафы +

+ Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. Отрицательный счет округляется до 0. +

+

+ Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. +

+ +### 15.7 Бонусные баллы +

+ 1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +

+### 15.8 Случаи дисквалификации +

+ Баллы дисквалифицированной команды приравниваются к нулю. +

+ +## 16 СОРЕВНОВАНИЯ +### 16.1 ДОПУСК К СОРЕВНОВАНИЯМ +#### 16.1.1 СТАТИЧЕСКАЯ ПРОВЕРКА +

+ Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +

+#### 16.1.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +

+ Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +

+#### 16.1.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +

+ В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке. +

+

+ Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. +

+ +### 16.2 КВАЛИФИКАЦИОННЫЙ ТУР +

+ Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +

+

+ Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +

+

+ По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +

+

+ В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. +

+ +### 16.3 ФИНАЛЬНАЯ СТАДИЯ +

+ После квалификационных раундов первые 4, 8 или 16 команд (в зависимости от числа команд, прошедших процедуру допуска к соревнованиям) будут участвовать в финальном туре в соответствии с рис. ниже. +

+

+ Матчи финального тура играются «на вылет», организаторы в праве изменить систему проведения финальной стадии. +

+{`Рисунок +

+ В случае двойной дисквалификации, двойного поражения или ничьей, матч незамедлительно переигрывается; если результат повторной игры по-прежнему двойная дисквалификация, двойное поражение или ничья, победитель определяется в соответствии с очками, заработанными в течение квалификационных раундов. Матчи за первое место играются по системе «лучший из трёх». Команда подряд выигравшая 2 матча считается победителем. +

+

+ В этом случае будьте внимательны: команды должны позаботиться о том, чтобы их Автономным роботам хватило заряда батарей на все матчи до победы одной из команд! +

+ +## Приложение +### Выставочный зал + **Размеры:** + * Высота: 70 мм + * Ширина: 150 мм + * Длина: 400 мм + +{`Рисунок + +{`Рисунок +### Пьедестал: + **Размеры:** + * Высота: 90 мм + * Ширина: 150 мм + * Длина: 400 мм +{`Рисунок +{`Рисунок +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613085842.mdx b/.history/posts/example-post_20220613085842.mdx new file mode 100644 index 0000000..2569987 --- /dev/null +++ b/.history/posts/example-post_20220613085842.mdx @@ -0,0 +1,515 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + **Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +### 15.6 Штрафы +

+ Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. Отрицательный счет округляется до 0. +

+

+ Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. +

+ +### 15.7 Бонусные баллы +

+ 1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +

+### 15.8 Случаи дисквалификации +

+ Баллы дисквалифицированной команды приравниваются к нулю. +

+ +## 16 СОРЕВНОВАНИЯ +### 16.1 ДОПУСК К СОРЕВНОВАНИЯМ +#### 16.1.1 СТАТИЧЕСКАЯ ПРОВЕРКА +

+ Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +

+#### 16.1.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +

+ Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +

+#### 16.1.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +

+ В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке. +

+

+ Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. +

+ +### 16.2 КВАЛИФИКАЦИОННЫЙ ТУР +

+ Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +

+

+ Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +

+

+ По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +

+

+ В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. +

+ +### 16.3 ФИНАЛЬНАЯ СТАДИЯ +

+ После квалификационных раундов первые 4, 8 или 16 команд (в зависимости от числа команд, прошедших процедуру допуска к соревнованиям) будут участвовать в финальном туре в соответствии с рис. ниже. +

+

+ Матчи финального тура играются «на вылет», организаторы в праве изменить систему проведения финальной стадии. +

+{`Рисунок +

+ В случае двойной дисквалификации, двойного поражения или ничьей, матч незамедлительно переигрывается; если результат повторной игры по-прежнему двойная дисквалификация, двойное поражение или ничья, победитель определяется в соответствии с очками, заработанными в течение квалификационных раундов. Матчи за первое место играются по системе «лучший из трёх». Команда подряд выигравшая 2 матча считается победителем. +

+

+ В этом случае будьте внимательны: команды должны позаботиться о том, чтобы их Автономным роботам хватило заряда батарей на все матчи до победы одной из команд! +

+ +## Приложение +### Выставочный зал + **Размеры:** + * Высота: 70 мм + * Ширина: 150 мм + * Длина: 400 мм + +{`Рисунок + +{`Рисунок +### Пьедестал: + **Размеры:** + * Высота: 90 мм + * Ширина: 150 мм + * Длина: 400 мм + +{`Рисунок + +{`Рисунок +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613085911.mdx b/.history/posts/example-post_20220613085911.mdx new file mode 100644 index 0000000..ac0371e --- /dev/null +++ b/.history/posts/example-post_20220613085911.mdx @@ -0,0 +1,515 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + **Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +### 15.6 Штрафы +

+ Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. Отрицательный счет округляется до 0. +

+

+ Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. +

+ +### 15.7 Бонусные баллы +

+ 1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +

+### 15.8 Случаи дисквалификации +

+ Баллы дисквалифицированной команды приравниваются к нулю. +

+ +## 16 СОРЕВНОВАНИЯ +### 16.1 ДОПУСК К СОРЕВНОВАНИЯМ +#### 16.1.1 СТАТИЧЕСКАЯ ПРОВЕРКА +

+ Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +

+#### 16.1.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +

+ Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +

+#### 16.1.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +

+ В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке. +

+

+ Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. +

+ +### 16.2 КВАЛИФИКАЦИОННЫЙ ТУР +

+ Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +

+

+ Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +

+

+ По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +

+

+ В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. +

+ +### 16.3 ФИНАЛЬНАЯ СТАДИЯ +

+ После квалификационных раундов первые 4, 8 или 16 команд (в зависимости от числа команд, прошедших процедуру допуска к соревнованиям) будут участвовать в финальном туре в соответствии с рис. ниже. +

+

+ Матчи финального тура играются «на вылет», организаторы в праве изменить систему проведения финальной стадии. +

+{`Рисунок +

+ В случае двойной дисквалификации, двойного поражения или ничьей, матч незамедлительно переигрывается; если результат повторной игры по-прежнему двойная дисквалификация, двойное поражение или ничья, победитель определяется в соответствии с очками, заработанными в течение квалификационных раундов. Матчи за первое место играются по системе «лучший из трёх». Команда подряд выигравшая 2 матча считается победителем. +

+

+ В этом случае будьте внимательны: команды должны позаботиться о том, чтобы их Автономным роботам хватило заряда батарей на все матчи до победы одной из команд! +

+ +## Приложение +### Выставочный зал + **Размеры:** + * Высота: 70 мм + * Ширина: 150 мм + * Длина: 400 мм + +{`Рисунок + +{`Рисунок +### Пьедестал: + **Размеры:** + * Высота: 90 мм + * Ширина: 150 мм + * Длина: 400 мм + +{`Рисунок + +{`Рисунок +Go back [Home](/) \ No newline at end of file diff --git a/.history/posts/example-post_20220613100613.mdx b/.history/posts/example-post_20220613100613.mdx new file mode 100644 index 0000000..5b9782e --- /dev/null +++ b/.history/posts/example-post_20220613100613.mdx @@ -0,0 +1,515 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + **Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +### 15.6 Штрафы +

+ Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. Отрицательный счет округляется до 0. +

+

+ Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. +

+ +### 15.7 Бонусные баллы +

+ 1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +

+### 15.8 Случаи дисквалификации +

+ Баллы дисквалифицированной команды приравниваются к нулю. +

+ +## 16 СОРЕВНОВАНИЯ +### 16.1 ДОПУСК К СОРЕВНОВАНИЯМ +#### 16.1.1 СТАТИЧЕСКАЯ ПРОВЕРКА +

+ Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +

+#### 16.1.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +

+ Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +

+#### 16.1.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +

+ В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке. +

+

+ Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. +

+ +### 16.2 КВАЛИФИКАЦИОННЫЙ ТУР +

+ Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +

+

+ Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +

+

+ По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +

+

+ В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. +

+ +### 16.3 ФИНАЛЬНАЯ СТАДИЯ +

+ После квалификационных раундов первые 4, 8 или 16 команд (в зависимости от числа команд, прошедших процедуру допуска к соревнованиям) будут участвовать в финальном туре в соответствии с рис. ниже. +

+

+ Матчи финального тура играются «на вылет», организаторы в праве изменить систему проведения финальной стадии. +

+{`Рисунок +

+ В случае двойной дисквалификации, двойного поражения или ничьей, матч незамедлительно переигрывается; если результат повторной игры по-прежнему двойная дисквалификация, двойное поражение или ничья, победитель определяется в соответствии с очками, заработанными в течение квалификационных раундов. Матчи за первое место играются по системе «лучший из трёх». Команда подряд выигравшая 2 матча считается победителем. +

+

+ В этом случае будьте внимательны: команды должны позаботиться о том, чтобы их Автономным роботам хватило заряда батарей на все матчи до победы одной из команд! +

+ +## Приложение +### Выставочный зал + **Размеры:** + * Высота: 70 мм + * Ширина: 150 мм + * Длина: 400 мм + +{`Рисунок + +{`Рисунок +### Пьедестал: + **Размеры:** + * Высота: 90 мм + * Ширина: 150 мм + * Длина: 400 мм + +{`Рисунок + +{`Рисунок +На главную [Home](/) \ No newline at end of file diff --git a/.history/posts/festival-schedule_20220611184525.mdx b/.history/posts/festival-schedule_20220611184525.mdx new file mode 100644 index 0000000..991ed71 --- /dev/null +++ b/.history/posts/festival-schedule_20220611184525.mdx @@ -0,0 +1,15 @@ +--- +title: Расписание фестиваля +description: That's why you always leave a note! I hear the jury's still out on science. Did you enjoy your meal, Mom? You drank it fast enough. I'm half machine. I'm a monster. We just call it a sausage. +date: '2021-03-10' +--- + +This is an example post. There's another one [here](/posts/example-post). + +Steve Holt! There's only one man I've ever called a coward, and that's Brian Doyle Murray. No, what I'm calling you is a television actor. No, I did not kill Kitty. However, I am going to oblige and answer the nice officer's questions because I am an honest man with no secrets to hide. + +## Heading H2 + +That's what it said on 'Ask Jeeves.' That's what it said on 'Ask Jeeves.' Across from where? That's why you always leave a note! I hear the jury's still out on science. + +I hear the jury's still out on science. I hear the jury's still out on science. No, I did not kill Kitty. However, I am going to oblige and answer the nice officer's questions because I am an honest man with no secrets to hide. diff --git a/.history/posts/festival-schedule_20220613101757.mdx b/.history/posts/festival-schedule_20220613101757.mdx new file mode 100644 index 0000000..7028a2d --- /dev/null +++ b/.history/posts/festival-schedule_20220613101757.mdx @@ -0,0 +1,15 @@ +--- +title: Расписание фестиваля +description: Расписаине фестиваля по дням +date: '2021-06-01' +--- + +This is an example post. There's another one [here](/posts/example-post). + +Steve Holt! There's only one man I've ever called a coward, and that's Brian Doyle Murray. No, what I'm calling you is a television actor. No, I did not kill Kitty. However, I am going to oblige and answer the nice officer's questions because I am an honest man with no secrets to hide. + +## Heading H2 + +That's what it said on 'Ask Jeeves.' That's what it said on 'Ask Jeeves.' Across from where? That's why you always leave a note! I hear the jury's still out on science. + +I hear the jury's still out on science. I hear the jury's still out on science. No, I did not kill Kitty. However, I am going to oblige and answer the nice officer's questions because I am an honest man with no secrets to hide. diff --git a/.history/posts/festival-schedule_20220613101929.mdx b/.history/posts/festival-schedule_20220613101929.mdx new file mode 100644 index 0000000..3aeabdd --- /dev/null +++ b/.history/posts/festival-schedule_20220613101929.mdx @@ -0,0 +1,8 @@ +--- +title: Расписание фестиваля +description: Расписаине фестиваля по дням +date: '2021-06-01' +--- + +## Расписаие фестиваля РобоТоп + diff --git a/.history/posts/festival-schedule_20220613103124.mdx b/.history/posts/festival-schedule_20220613103124.mdx new file mode 100644 index 0000000..562cb1d --- /dev/null +++ b/.history/posts/festival-schedule_20220613103124.mdx @@ -0,0 +1,18 @@ +--- +title: Расписание фестиваля +description: Расписаине фестиваля по дням +date: '2021-06-01' +--- + +## Расписаие фестиваля РобоТоп +### Понедельник - Заезды возрастных групп 1, 2, 3 классы + + 08:00 - 11:00 - Заезд и регистрация команд, отладка роботов + + 11:00 - 11:45 - Открытие фесиваля + + 11:45 - 12:30 - Обед + + 13:00 - 14:00 - Клафикационные заезды + + 14:00 - 15:00 - Заеды 1/16 + + 15:00 - 16:00 - Заеды 1/8 + + 16:00 - 16:30 - Заеды 1/4 + + 16:30 - 17:00 - Заеды 1/2 + + 17:30 - 18:30 - Ужин + + 18:30 - 19:00 - Награждение первого дня \ No newline at end of file diff --git a/.history/posts/festival-schedule_20220613103354.mdx b/.history/posts/festival-schedule_20220613103354.mdx new file mode 100644 index 0000000..56b05ce --- /dev/null +++ b/.history/posts/festival-schedule_20220613103354.mdx @@ -0,0 +1,66 @@ +--- +title: Расписание фестиваля +description: Расписаине фестиваля по дням +date: '2021-06-01' +--- + +## Расписаие фестиваля РобоТоп +### Понедельник - Заезды возрастных групп 1, 2 классы + + 08:00 - 11:00 - Заезд и регистрация команд, отладка роботов + + 11:00 - 11:45 - Открытие фесиваля + + 11:45 - 12:30 - Обед + + 13:00 - 14:00 - Клафикационные заезды + + 14:00 - 15:00 - Заеды 1/16 + + 15:00 - 16:00 - Заеды 1/8 + + 16:00 - 16:30 - Заеды 1/4 + + 16:30 - 17:00 - Заеды 1/2 + + 17:30 - 18:30 - Ужин + + 18:30 - 19:00 - Награждение первого дня + +### Вторник - Заезды возрастных групп 3, 4 классы + + 08:00 - 11:00 - Заезд и регистрация команд, отладка роботов + + 11:00 - 11:45 - Открытие фесиваля + + 11:45 - 12:30 - Обед + + 13:00 - 14:00 - Клафикационные заезды + + 14:00 - 15:00 - Заеды 1/16 + + 15:00 - 16:00 - Заеды 1/8 + + 16:00 - 16:30 - Заеды 1/4 + + 16:30 - 17:00 - Заеды 1/2 + + 17:30 - 18:30 - Ужин + + 18:30 - 19:00 - Награждение второго дня + +### Среда - Заезды возрастных групп 5, 6 классы + + 08:00 - 11:00 - Заезд и регистрация команд, отладка роботов + + 11:00 - 11:45 - Открытие фесиваля + + 11:45 - 12:30 - Обед + + 13:00 - 14:00 - Клафикационные заезды + + 14:00 - 15:00 - Заеды 1/16 + + 15:00 - 16:00 - Заеды 1/8 + + 16:00 - 16:30 - Заеды 1/4 + + 16:30 - 17:00 - Заеды 1/2 + + 17:30 - 18:30 - Ужин + + 18:30 - 19:00 - Награждение третьего дня + +### Четверг - Заезды возрастных групп 7, 8 классы + + 08:00 - 11:00 - Заезд и регистрация команд, отладка роботов + + 11:00 - 11:45 - Открытие фесиваля + + 11:45 - 12:30 - Обед + + 13:00 - 14:00 - Клафикационные заезды + + 14:00 - 15:00 - Заеды 1/16 + + 15:00 - 16:00 - Заеды 1/8 + + 16:00 - 16:30 - Заеды 1/4 + + 16:30 - 17:00 - Заеды 1/2 + + 17:30 - 18:30 - Ужин + + 18:30 - 19:00 - Награждение четвертого дня + +### Пятница - Заезды возрастных групп 9, 10, 11 классы + + 08:00 - 11:00 - Заезд и регистрация команд, отладка роботов + + 11:00 - 11:45 - Открытие фесиваля + + 11:45 - 12:30 - Обед + + 13:00 - 14:00 - Клафикационные заезды + + 14:00 - 15:00 - Заеды 1/16 + + 15:00 - 16:00 - Заеды 1/8 + + 16:00 - 16:30 - Заеды 1/4 + + 16:30 - 17:00 - Заеды 1/2 + + 17:30 - 18:30 - Ужин + + 18:30 - 19:00 - Награждение пятого дня \ No newline at end of file diff --git a/.history/posts/festival-schedule_20220613103422.mdx b/.history/posts/festival-schedule_20220613103422.mdx new file mode 100644 index 0000000..dcd2156 --- /dev/null +++ b/.history/posts/festival-schedule_20220613103422.mdx @@ -0,0 +1,69 @@ +--- +title: Расписание фестиваля +description: Расписаине фестиваля по дням +date: '2021-06-01' +--- + +## Расписаие фестиваля РобоТоп + +**Примерное расписание фестиваля** + +### Понедельник - Заезды возрастных групп 1, 2 классы + + 08:00 - 11:00 - Заезд и регистрация команд, отладка роботов + + 11:00 - 11:45 - Открытие фесиваля + + 11:45 - 12:30 - Обед + + 13:00 - 14:00 - Клафикационные заезды + + 14:00 - 15:00 - Заеды 1/16 + + 15:00 - 16:00 - Заеды 1/8 + + 16:00 - 16:30 - Заеды 1/4 + + 16:30 - 17:00 - Заеды 1/2 + + 17:30 - 18:30 - Ужин + + 18:30 - 19:00 - Награждение первого дня + +### Вторник - Заезды возрастных групп 3, 4 классы + + 08:00 - 11:00 - Заезд и регистрация команд, отладка роботов + + 11:00 - 11:45 - Открытие фесиваля + + 11:45 - 12:30 - Обед + + 13:00 - 14:00 - Клафикационные заезды + + 14:00 - 15:00 - Заеды 1/16 + + 15:00 - 16:00 - Заеды 1/8 + + 16:00 - 16:30 - Заеды 1/4 + + 16:30 - 17:00 - Заеды 1/2 + + 17:30 - 18:30 - Ужин + + 18:30 - 19:00 - Награждение второго дня + +### Среда - Заезды возрастных групп 5, 6 классы + + 08:00 - 11:00 - Заезд и регистрация команд, отладка роботов + + 11:00 - 11:45 - Открытие фесиваля + + 11:45 - 12:30 - Обед + + 13:00 - 14:00 - Клафикационные заезды + + 14:00 - 15:00 - Заеды 1/16 + + 15:00 - 16:00 - Заеды 1/8 + + 16:00 - 16:30 - Заеды 1/4 + + 16:30 - 17:00 - Заеды 1/2 + + 17:30 - 18:30 - Ужин + + 18:30 - 19:00 - Награждение третьего дня + +### Четверг - Заезды возрастных групп 7, 8 классы + + 08:00 - 11:00 - Заезд и регистрация команд, отладка роботов + + 11:00 - 11:45 - Открытие фесиваля + + 11:45 - 12:30 - Обед + + 13:00 - 14:00 - Клафикационные заезды + + 14:00 - 15:00 - Заеды 1/16 + + 15:00 - 16:00 - Заеды 1/8 + + 16:00 - 16:30 - Заеды 1/4 + + 16:30 - 17:00 - Заеды 1/2 + + 17:30 - 18:30 - Ужин + + 18:30 - 19:00 - Награждение четвертого дня + +### Пятница - Заезды возрастных групп 9, 10, 11 классы + + 08:00 - 11:00 - Заезд и регистрация команд, отладка роботов + + 11:00 - 11:45 - Открытие фесиваля + + 11:45 - 12:30 - Обед + + 13:00 - 14:00 - Клафикационные заезды + + 14:00 - 15:00 - Заеды 1/16 + + 15:00 - 16:00 - Заеды 1/8 + + 16:00 - 16:30 - Заеды 1/4 + + 16:30 - 17:00 - Заеды 1/2 + + 17:30 - 18:30 - Ужин + + 18:30 - 19:00 - Награждение пятого дня \ No newline at end of file diff --git a/.history/posts/festival-schedule_20220613103432.mdx b/.history/posts/festival-schedule_20220613103432.mdx new file mode 100644 index 0000000..f694284 --- /dev/null +++ b/.history/posts/festival-schedule_20220613103432.mdx @@ -0,0 +1,69 @@ +--- +title: Расписание фестиваля +description: Расписаине фестиваля по дням +date: '2021-06-01' +--- + +## Расписаие фестиваля РобоТоп + +**!!Примерное расписание фестиваля!!** + +### Понедельник - Заезды возрастных групп 1, 2 классы + + 08:00 - 11:00 - Заезд и регистрация команд, отладка роботов + + 11:00 - 11:45 - Открытие фесиваля + + 11:45 - 12:30 - Обед + + 13:00 - 14:00 - Клафикационные заезды + + 14:00 - 15:00 - Заеды 1/16 + + 15:00 - 16:00 - Заеды 1/8 + + 16:00 - 16:30 - Заеды 1/4 + + 16:30 - 17:00 - Заеды 1/2 + + 17:30 - 18:30 - Ужин + + 18:30 - 19:00 - Награждение первого дня + +### Вторник - Заезды возрастных групп 3, 4 классы + + 08:00 - 11:00 - Заезд и регистрация команд, отладка роботов + + 11:00 - 11:45 - Открытие фесиваля + + 11:45 - 12:30 - Обед + + 13:00 - 14:00 - Клафикационные заезды + + 14:00 - 15:00 - Заеды 1/16 + + 15:00 - 16:00 - Заеды 1/8 + + 16:00 - 16:30 - Заеды 1/4 + + 16:30 - 17:00 - Заеды 1/2 + + 17:30 - 18:30 - Ужин + + 18:30 - 19:00 - Награждение второго дня + +### Среда - Заезды возрастных групп 5, 6 классы + + 08:00 - 11:00 - Заезд и регистрация команд, отладка роботов + + 11:00 - 11:45 - Открытие фесиваля + + 11:45 - 12:30 - Обед + + 13:00 - 14:00 - Клафикационные заезды + + 14:00 - 15:00 - Заеды 1/16 + + 15:00 - 16:00 - Заеды 1/8 + + 16:00 - 16:30 - Заеды 1/4 + + 16:30 - 17:00 - Заеды 1/2 + + 17:30 - 18:30 - Ужин + + 18:30 - 19:00 - Награждение третьего дня + +### Четверг - Заезды возрастных групп 7, 8 классы + + 08:00 - 11:00 - Заезд и регистрация команд, отладка роботов + + 11:00 - 11:45 - Открытие фесиваля + + 11:45 - 12:30 - Обед + + 13:00 - 14:00 - Клафикационные заезды + + 14:00 - 15:00 - Заеды 1/16 + + 15:00 - 16:00 - Заеды 1/8 + + 16:00 - 16:30 - Заеды 1/4 + + 16:30 - 17:00 - Заеды 1/2 + + 17:30 - 18:30 - Ужин + + 18:30 - 19:00 - Награждение четвертого дня + +### Пятница - Заезды возрастных групп 9, 10, 11 классы + + 08:00 - 11:00 - Заезд и регистрация команд, отладка роботов + + 11:00 - 11:45 - Открытие фесиваля + + 11:45 - 12:30 - Обед + + 13:00 - 14:00 - Клафикационные заезды + + 14:00 - 15:00 - Заеды 1/16 + + 15:00 - 16:00 - Заеды 1/8 + + 16:00 - 16:30 - Заеды 1/4 + + 16:30 - 17:00 - Заеды 1/2 + + 17:30 - 18:30 - Ужин + + 18:30 - 19:00 - Награждение пятого дня \ No newline at end of file diff --git a/.history/posts/hello-world_20210629061557.mdx b/.history/posts/hello-world_20210629061557.mdx new file mode 100644 index 0000000..5212a89 --- /dev/null +++ b/.history/posts/hello-world_20210629061557.mdx @@ -0,0 +1,15 @@ +--- +title: Hello World +description: That's why you always leave a note! I hear the jury's still out on science. Did you enjoy your meal, Mom? You drank it fast enough. I'm half machine. I'm a monster. We just call it a sausage. +date: '2021-03-10' +--- + +This is an example post. There's another one [here](/posts/example-post). + +Steve Holt! There's only one man I've ever called a coward, and that's Brian Doyle Murray. No, what I'm calling you is a television actor. No, I did not kill Kitty. However, I am going to oblige and answer the nice officer's questions because I am an honest man with no secrets to hide. + +## Heading H2 + +That's what it said on 'Ask Jeeves.' That's what it said on 'Ask Jeeves.' Across from where? That's why you always leave a note! I hear the jury's still out on science. + +I hear the jury's still out on science. I hear the jury's still out on science. No, I did not kill Kitty. However, I am going to oblige and answer the nice officer's questions because I am an honest man with no secrets to hide. diff --git a/.history/posts/hello-world_20220611184526.mdx b/.history/posts/hello-world_20220611184526.mdx new file mode 100644 index 0000000..991ed71 --- /dev/null +++ b/.history/posts/hello-world_20220611184526.mdx @@ -0,0 +1,15 @@ +--- +title: Расписание фестиваля +description: That's why you always leave a note! I hear the jury's still out on science. Did you enjoy your meal, Mom? You drank it fast enough. I'm half machine. I'm a monster. We just call it a sausage. +date: '2021-03-10' +--- + +This is an example post. There's another one [here](/posts/example-post). + +Steve Holt! There's only one man I've ever called a coward, and that's Brian Doyle Murray. No, what I'm calling you is a television actor. No, I did not kill Kitty. However, I am going to oblige and answer the nice officer's questions because I am an honest man with no secrets to hide. + +## Heading H2 + +That's what it said on 'Ask Jeeves.' That's what it said on 'Ask Jeeves.' Across from where? That's why you always leave a note! I hear the jury's still out on science. + +I hear the jury's still out on science. I hear the jury's still out on science. No, I did not kill Kitty. However, I am going to oblige and answer the nice officer's questions because I am an honest man with no secrets to hide. diff --git a/.history/posts/registration_20220613103737.mdx b/.history/posts/registration_20220613103737.mdx new file mode 100644 index 0000000..e69de29 diff --git a/.history/posts/registration_20220613103839.mdx b/.history/posts/registration_20220613103839.mdx new file mode 100644 index 0000000..d4c56c5 --- /dev/null +++ b/.history/posts/registration_20220613103839.mdx @@ -0,0 +1,5 @@ +--- +title: Регистрация команд +description: Вы можете зарегистрровать команду +date: '2021-06-01' +--- diff --git a/.history/posts/registration_20220613103852.mdx b/.history/posts/registration_20220613103852.mdx new file mode 100644 index 0000000..8c0ac39 --- /dev/null +++ b/.history/posts/registration_20220613103852.mdx @@ -0,0 +1,5 @@ +--- +title: Регистрация команд +description: Вы можете зарегистрровать команду +date: '2021-06-02' +--- diff --git a/.history/posts/registration_20220613103902.mdx b/.history/posts/registration_20220613103902.mdx new file mode 100644 index 0000000..0035cde --- /dev/null +++ b/.history/posts/registration_20220613103902.mdx @@ -0,0 +1,5 @@ +--- +title: Регистрация команд +description: Вы можете зарегистрровать команду +date: '2021-06-03' +--- diff --git a/.history/posts/regulations_20220613100612.mdx b/.history/posts/regulations_20220613100612.mdx new file mode 100644 index 0000000..5b9782e --- /dev/null +++ b/.history/posts/regulations_20220613100612.mdx @@ -0,0 +1,515 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + **Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +### 15.6 Штрафы +

+ Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. Отрицательный счет округляется до 0. +

+

+ Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. +

+ +### 15.7 Бонусные баллы +

+ 1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +

+### 15.8 Случаи дисквалификации +

+ Баллы дисквалифицированной команды приравниваются к нулю. +

+ +## 16 СОРЕВНОВАНИЯ +### 16.1 ДОПУСК К СОРЕВНОВАНИЯМ +#### 16.1.1 СТАТИЧЕСКАЯ ПРОВЕРКА +

+ Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +

+#### 16.1.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +

+ Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +

+#### 16.1.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +

+ В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке. +

+

+ Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. +

+ +### 16.2 КВАЛИФИКАЦИОННЫЙ ТУР +

+ Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +

+

+ Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +

+

+ По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +

+

+ В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. +

+ +### 16.3 ФИНАЛЬНАЯ СТАДИЯ +

+ После квалификационных раундов первые 4, 8 или 16 команд (в зависимости от числа команд, прошедших процедуру допуска к соревнованиям) будут участвовать в финальном туре в соответствии с рис. ниже. +

+

+ Матчи финального тура играются «на вылет», организаторы в праве изменить систему проведения финальной стадии. +

+{`Рисунок +

+ В случае двойной дисквалификации, двойного поражения или ничьей, матч незамедлительно переигрывается; если результат повторной игры по-прежнему двойная дисквалификация, двойное поражение или ничья, победитель определяется в соответствии с очками, заработанными в течение квалификационных раундов. Матчи за первое место играются по системе «лучший из трёх». Команда подряд выигравшая 2 матча считается победителем. +

+

+ В этом случае будьте внимательны: команды должны позаботиться о том, чтобы их Автономным роботам хватило заряда батарей на все матчи до победы одной из команд! +

+ +## Приложение +### Выставочный зал + **Размеры:** + * Высота: 70 мм + * Ширина: 150 мм + * Длина: 400 мм + +{`Рисунок + +{`Рисунок +### Пьедестал: + **Размеры:** + * Высота: 90 мм + * Ширина: 150 мм + * Длина: 400 мм + +{`Рисунок + +{`Рисунок +На главную [Home](/) \ No newline at end of file diff --git a/.history/posts/regulations_20220613101708.mdx b/.history/posts/regulations_20220613101708.mdx new file mode 100644 index 0000000..c917f49 --- /dev/null +++ b/.history/posts/regulations_20220613101708.mdx @@ -0,0 +1,515 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-01-06' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + **Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +### 15.6 Штрафы +

+ Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. Отрицательный счет округляется до 0. +

+

+ Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. +

+ +### 15.7 Бонусные баллы +

+ 1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +

+### 15.8 Случаи дисквалификации +

+ Баллы дисквалифицированной команды приравниваются к нулю. +

+ +## 16 СОРЕВНОВАНИЯ +### 16.1 ДОПУСК К СОРЕВНОВАНИЯМ +#### 16.1.1 СТАТИЧЕСКАЯ ПРОВЕРКА +

+ Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +

+#### 16.1.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +

+ Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +

+#### 16.1.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +

+ В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке. +

+

+ Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. +

+ +### 16.2 КВАЛИФИКАЦИОННЫЙ ТУР +

+ Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +

+

+ Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +

+

+ По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +

+

+ В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. +

+ +### 16.3 ФИНАЛЬНАЯ СТАДИЯ +

+ После квалификационных раундов первые 4, 8 или 16 команд (в зависимости от числа команд, прошедших процедуру допуска к соревнованиям) будут участвовать в финальном туре в соответствии с рис. ниже. +

+

+ Матчи финального тура играются «на вылет», организаторы в праве изменить систему проведения финальной стадии. +

+{`Рисунок +

+ В случае двойной дисквалификации, двойного поражения или ничьей, матч незамедлительно переигрывается; если результат повторной игры по-прежнему двойная дисквалификация, двойное поражение или ничья, победитель определяется в соответствии с очками, заработанными в течение квалификационных раундов. Матчи за первое место играются по системе «лучший из трёх». Команда подряд выигравшая 2 матча считается победителем. +

+

+ В этом случае будьте внимательны: команды должны позаботиться о том, чтобы их Автономным роботам хватило заряда батарей на все матчи до победы одной из команд! +

+ +## Приложение +### Выставочный зал + **Размеры:** + * Высота: 70 мм + * Ширина: 150 мм + * Длина: 400 мм + +{`Рисунок + +{`Рисунок +### Пьедестал: + **Размеры:** + * Высота: 90 мм + * Ширина: 150 мм + * Длина: 400 мм + +{`Рисунок + +{`Рисунок +На главную [Home](/) \ No newline at end of file diff --git a/.history/posts/regulations_20220613101718.mdx b/.history/posts/regulations_20220613101718.mdx new file mode 100644 index 0000000..697a65e --- /dev/null +++ b/.history/posts/regulations_20220613101718.mdx @@ -0,0 +1,515 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-06' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + **Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +### 15.6 Штрафы +

+ Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. Отрицательный счет округляется до 0. +

+

+ Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. +

+ +### 15.7 Бонусные баллы +

+ 1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +

+### 15.8 Случаи дисквалификации +

+ Баллы дисквалифицированной команды приравниваются к нулю. +

+ +## 16 СОРЕВНОВАНИЯ +### 16.1 ДОПУСК К СОРЕВНОВАНИЯМ +#### 16.1.1 СТАТИЧЕСКАЯ ПРОВЕРКА +

+ Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +

+#### 16.1.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +

+ Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +

+#### 16.1.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +

+ В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке. +

+

+ Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. +

+ +### 16.2 КВАЛИФИКАЦИОННЫЙ ТУР +

+ Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +

+

+ Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +

+

+ По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +

+

+ В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. +

+ +### 16.3 ФИНАЛЬНАЯ СТАДИЯ +

+ После квалификационных раундов первые 4, 8 или 16 команд (в зависимости от числа команд, прошедших процедуру допуска к соревнованиям) будут участвовать в финальном туре в соответствии с рис. ниже. +

+

+ Матчи финального тура играются «на вылет», организаторы в праве изменить систему проведения финальной стадии. +

+{`Рисунок +

+ В случае двойной дисквалификации, двойного поражения или ничьей, матч незамедлительно переигрывается; если результат повторной игры по-прежнему двойная дисквалификация, двойное поражение или ничья, победитель определяется в соответствии с очками, заработанными в течение квалификационных раундов. Матчи за первое место играются по системе «лучший из трёх». Команда подряд выигравшая 2 матча считается победителем. +

+

+ В этом случае будьте внимательны: команды должны позаботиться о том, чтобы их Автономным роботам хватило заряда батарей на все матчи до победы одной из команд! +

+ +## Приложение +### Выставочный зал + **Размеры:** + * Высота: 70 мм + * Ширина: 150 мм + * Длина: 400 мм + +{`Рисунок + +{`Рисунок +### Пьедестал: + **Размеры:** + * Высота: 90 мм + * Ширина: 150 мм + * Длина: 400 мм + +{`Рисунок + +{`Рисунок +На главную [Home](/) \ No newline at end of file diff --git a/.history/posts/regulations_20220613101730.mdx b/.history/posts/regulations_20220613101730.mdx new file mode 100644 index 0000000..5b9782e --- /dev/null +++ b/.history/posts/regulations_20220613101730.mdx @@ -0,0 +1,515 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + **Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +### 15.6 Штрафы +

+ Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. Отрицательный счет округляется до 0. +

+

+ Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. +

+ +### 15.7 Бонусные баллы +

+ 1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +

+### 15.8 Случаи дисквалификации +

+ Баллы дисквалифицированной команды приравниваются к нулю. +

+ +## 16 СОРЕВНОВАНИЯ +### 16.1 ДОПУСК К СОРЕВНОВАНИЯМ +#### 16.1.1 СТАТИЧЕСКАЯ ПРОВЕРКА +

+ Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +

+#### 16.1.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +

+ Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +

+#### 16.1.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +

+ В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке. +

+

+ Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. +

+ +### 16.2 КВАЛИФИКАЦИОННЫЙ ТУР +

+ Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +

+

+ Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +

+

+ По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +

+

+ В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. +

+ +### 16.3 ФИНАЛЬНАЯ СТАДИЯ +

+ После квалификационных раундов первые 4, 8 или 16 команд (в зависимости от числа команд, прошедших процедуру допуска к соревнованиям) будут участвовать в финальном туре в соответствии с рис. ниже. +

+

+ Матчи финального тура играются «на вылет», организаторы в праве изменить систему проведения финальной стадии. +

+{`Рисунок +

+ В случае двойной дисквалификации, двойного поражения или ничьей, матч незамедлительно переигрывается; если результат повторной игры по-прежнему двойная дисквалификация, двойное поражение или ничья, победитель определяется в соответствии с очками, заработанными в течение квалификационных раундов. Матчи за первое место играются по системе «лучший из трёх». Команда подряд выигравшая 2 матча считается победителем. +

+

+ В этом случае будьте внимательны: команды должны позаботиться о том, чтобы их Автономным роботам хватило заряда батарей на все матчи до победы одной из команд! +

+ +## Приложение +### Выставочный зал + **Размеры:** + * Высота: 70 мм + * Ширина: 150 мм + * Длина: 400 мм + +{`Рисунок + +{`Рисунок +### Пьедестал: + **Размеры:** + * Высота: 90 мм + * Ширина: 150 мм + * Длина: 400 мм + +{`Рисунок + +{`Рисунок +На главную [Home](/) \ No newline at end of file diff --git a/.history/posts/regulations_20220702190016.mdx b/.history/posts/regulations_20220702190016.mdx new file mode 100644 index 0000000..a3f00d3 --- /dev/null +++ b/.history/posts/regulations_20220702190016.mdx @@ -0,0 +1,515 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + **Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +### 15.6 Штрафы +

+ Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. Отрицательный счет округляется до 0. +

+

+ Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. +

+ +### 15.7 Бонусные баллы +

+ 1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +

+### 15.8 Случаи дисквалификации +

+ Баллы дисквалифицированной команды приравниваются к нулю. +

+ +## 16 СОРЕВНОВАНИЯ +### 16.1 ДОПУСК К СОРЕВНОВАНИЯМ +#### 16.1.1 СТАТИЧЕСКАЯ ПРОВЕРКА +

+ Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +

+#### 16.1.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +

+ Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +

+#### 16.1.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +

+ В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке. +

+

+ Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. +

+ +### 16.2 КВАЛИФИКАЦИОННЫЙ ТУР +

+ Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +

+

+ Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +

+

+ По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +

+

+ В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. +

+ +### 16.3 ФИНАЛЬНАЯ СТАДИЯ +

+ После квалификационных раундов первые 4, 8 или 16 команд (в зависимости от числа команд, прошедших процедуру допуска к соревнованиям) будут участвовать в финальном туре в соответствии с рис. ниже. +

+

+ Матчи финального тура играются «на вылет», организаторы в праве изменить систему проведения финальной стадии. +

+{`Рисунок +

+ В случае двойной дисквалификации, двойного поражения или ничьей, матч незамедлительно переигрывается; если результат повторной игры по-прежнему двойная дисквалификация, двойное поражение или ничья, победитель определяется в соответствии с очками, заработанными в течение квалификационных раундов. Матчи за первое место играются по системе «лучший из трёх». Команда подряд выигравшая 2 матча считается победителем. +

+

+ В этом случае будьте внимательны: команды должны позаботиться о том, чтобы их Автономным роботам хватило заряда батарей на все матчи до победы одной из команд! +

+ +## Приложение +### Выставочный зал + **Размеры:** + * Высота: 70 мм + * Ширина: 150 мм + * Длина: 400 мм + +{`Рисунок + +{`Рисунок +### Пьедестал: + **Размеры:** + * Высота: 90 мм + * Ширина: 150 мм + * Длина: 400 мм + +{`Рисунок + +{`Рисунок +На главную [Home](/) \ No newline at end of file diff --git a/.history/posts/regulations_20220702190026.mdx b/.history/posts/regulations_20220702190026.mdx new file mode 100644 index 0000000..eb45d93 --- /dev/null +++ b/.history/posts/regulations_20220702190026.mdx @@ -0,0 +1,515 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + **Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +### 15.6 Штрафы +

+ Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. Отрицательный счет округляется до 0. +

+

+ Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. +

+ +### 15.7 Бонусные баллы +

+ 1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +

+### 15.8 Случаи дисквалификации +

+ Баллы дисквалифицированной команды приравниваются к нулю. +

+ +## 16 СОРЕВНОВАНИЯ +### 16.1 ДОПУСК К СОРЕВНОВАНИЯМ +#### 16.1.1 СТАТИЧЕСКАЯ ПРОВЕРКА +

+ Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +

+#### 16.1.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +

+ Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +

+#### 16.1.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +

+ В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке. +

+

+ Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. +

+ +### 16.2 КВАЛИФИКАЦИОННЫЙ ТУР +

+ Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +

+

+ Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +

+

+ По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +

+

+ В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. +

+ +### 16.3 ФИНАЛЬНАЯ СТАДИЯ +

+ После квалификационных раундов первые 4, 8 или 16 команд (в зависимости от числа команд, прошедших процедуру допуска к соревнованиям) будут участвовать в финальном туре в соответствии с рис. ниже. +

+

+ Матчи финального тура играются «на вылет», организаторы в праве изменить систему проведения финальной стадии. +

+{`Рисунок +

+ В случае двойной дисквалификации, двойного поражения или ничьей, матч незамедлительно переигрывается; если результат повторной игры по-прежнему двойная дисквалификация, двойное поражение или ничья, победитель определяется в соответствии с очками, заработанными в течение квалификационных раундов. Матчи за первое место играются по системе «лучший из трёх». Команда подряд выигравшая 2 матча считается победителем. +

+

+ В этом случае будьте внимательны: команды должны позаботиться о том, чтобы их Автономным роботам хватило заряда батарей на все матчи до победы одной из команд! +

+ +## Приложение +### Выставочный зал + **Размеры:** + * Высота: 70 мм + * Ширина: 150 мм + * Длина: 400 мм + +{`Рисунок + +{`Рисунок +### Пьедестал: + **Размеры:** + * Высота: 90 мм + * Ширина: 150 мм + * Длина: 400 мм + +{`Рисунок + +{`Рисунок +На главную [Home](/) \ No newline at end of file diff --git a/.history/posts/regulations_20220702190110.mdx b/.history/posts/regulations_20220702190110.mdx new file mode 100644 index 0000000..5f038e3 --- /dev/null +++ b/.history/posts/regulations_20220702190110.mdx @@ -0,0 +1,515 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + **Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +### 15.6 Штрафы +

+ Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. Отрицательный счет округляется до 0. +

+

+ Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. +

+ +### 15.7 Бонусные баллы +

+ 1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +

+### 15.8 Случаи дисквалификации +

+ Баллы дисквалифицированной команды приравниваются к нулю. +

+ +## 16 СОРЕВНОВАНИЯ +### 16.1 ДОПУСК К СОРЕВНОВАНИЯМ +#### 16.1.1 СТАТИЧЕСКАЯ ПРОВЕРКА +

+ Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +

+#### 16.1.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +

+ Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +

+#### 16.1.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +

+ В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке. +

+

+ Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. +

+ +### 16.2 КВАЛИФИКАЦИОННЫЙ ТУР +

+ Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +

+

+ Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +

+

+ По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +

+

+ В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. +

+ +### 16.3 ФИНАЛЬНАЯ СТАДИЯ +

+ После квалификационных раундов первые 4, 8 или 16 команд (в зависимости от числа команд, прошедших процедуру допуска к соревнованиям) будут участвовать в финальном туре в соответствии с рис. ниже. +

+

+ Матчи финального тура играются «на вылет», организаторы в праве изменить систему проведения финальной стадии. +

+{`Рисунок +

+ В случае двойной дисквалификации, двойного поражения или ничьей, матч незамедлительно переигрывается; если результат повторной игры по-прежнему двойная дисквалификация, двойное поражение или ничья, победитель определяется в соответствии с очками, заработанными в течение квалификационных раундов. Матчи за первое место играются по системе «лучший из трёх». Команда подряд выигравшая 2 матча считается победителем. +

+

+ В этом случае будьте внимательны: команды должны позаботиться о том, чтобы их Автономным роботам хватило заряда батарей на все матчи до победы одной из команд! +

+ +## Приложение +### Выставочный зал + **Размеры:** + * Высота: 70 мм + * Ширина: 150 мм + * Длина: 400 мм + +{`Рисунок + +{`Рисунок +### Пьедестал: + **Размеры:** + * Высота: 90 мм + * Ширина: 150 мм + * Длина: 400 мм + +{`Рисунок + +{`Рисунок +На главную [Главная](/) \ No newline at end of file diff --git a/.history/posts/task-completion-examples_20220702140632.mdx b/.history/posts/task-completion-examples_20220702140632.mdx new file mode 100644 index 0000000..e69de29 diff --git a/.history/posts/task-completion-examples_20220702140956.mdx b/.history/posts/task-completion-examples_20220702140956.mdx new file mode 100644 index 0000000..ae58931 --- /dev/null +++ b/.history/posts/task-completion-examples_20220702140956.mdx @@ -0,0 +1,11 @@ +--- +title: Примеры выполнения задания +description: Видео по выполнения заданий и материалы по сборке и программирования робота +date: '2022-07-02' +--- + +Наданный момент мы подготавливаем материаол для публикации на сайте. +Весь материал будет опубликован до 1 сентября 2022 года. + + +На главную [Home](/) \ No newline at end of file diff --git a/.history/redux/store_20220702141319.ts b/.history/redux/store_20220702141319.ts new file mode 100644 index 0000000..e69de29 diff --git a/.history/redux/store_20220702143205.ts b/.history/redux/store_20220702143205.ts new file mode 100644 index 0000000..ba528cf --- /dev/null +++ b/.history/redux/store_20220702143205.ts @@ -0,0 +1,15 @@ +import { configureStore } from '@reduxjs/toolkit'; +import userSlice from './user/slice'; + +import { useDispatch } from 'react-redux'; + +export const store = configureStore({ + reducer: {userSlice}, +}) + +export type RootState = ReturnType; + +type AppDispatch = typeof store.dispatch; + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export const useAppDispatch = () => useDispatch(); \ No newline at end of file diff --git a/.history/redux/user/asyncActions_20220702141530.ts b/.history/redux/user/asyncActions_20220702141530.ts new file mode 100644 index 0000000..e69de29 diff --git a/.history/redux/user/asyncActions_20220702141910.ts b/.history/redux/user/asyncActions_20220702141910.ts new file mode 100644 index 0000000..0da94d2 --- /dev/null +++ b/.history/redux/user/asyncActions_20220702141910.ts @@ -0,0 +1,12 @@ +import { createAsyncThunk } from '@reduxjs/toolkit'; +import axios from 'axios'; +import { Categories } from './types'; + +export const fetchCategories = createAsyncThunk( + 'Categories/fetchCategoriesStatus', + async () => { + const { data } = await axios.get(`/api/loadingLegisteredCommands`); + console.log(data); + return data; + }, + ); \ No newline at end of file diff --git a/.history/redux/user/asyncActions_20220702142059.ts b/.history/redux/user/asyncActions_20220702142059.ts new file mode 100644 index 0000000..0da94d2 --- /dev/null +++ b/.history/redux/user/asyncActions_20220702142059.ts @@ -0,0 +1,12 @@ +import { createAsyncThunk } from '@reduxjs/toolkit'; +import axios from 'axios'; +import { Categories } from './types'; + +export const fetchCategories = createAsyncThunk( + 'Categories/fetchCategoriesStatus', + async () => { + const { data } = await axios.get(`/api/loadingLegisteredCommands`); + console.log(data); + return data; + }, + ); \ No newline at end of file diff --git a/.history/redux/user/asyncActions_20220702142150.ts b/.history/redux/user/asyncActions_20220702142150.ts new file mode 100644 index 0000000..d45a545 --- /dev/null +++ b/.history/redux/user/asyncActions_20220702142150.ts @@ -0,0 +1,12 @@ +import { createAsyncThunk } from '@reduxjs/toolkit'; +import axios from 'axios'; +import { User } from './types'; + +export const fetchUser = createAsyncThunk( + 'User/fetchUserStatus', + async () => { + const { data } = await axios.get(`/api/loadingLegisteredCommands`); + console.log(data); + return data; + }, + ); \ No newline at end of file diff --git a/.history/redux/user/asyncActions_20220702142327.ts b/.history/redux/user/asyncActions_20220702142327.ts new file mode 100644 index 0000000..d45a545 --- /dev/null +++ b/.history/redux/user/asyncActions_20220702142327.ts @@ -0,0 +1,12 @@ +import { createAsyncThunk } from '@reduxjs/toolkit'; +import axios from 'axios'; +import { User } from './types'; + +export const fetchUser = createAsyncThunk( + 'User/fetchUserStatus', + async () => { + const { data } = await axios.get(`/api/loadingLegisteredCommands`); + console.log(data); + return data; + }, + ); \ No newline at end of file diff --git a/.history/redux/user/asyncActions_20220702143411.ts b/.history/redux/user/asyncActions_20220702143411.ts new file mode 100644 index 0000000..115031e --- /dev/null +++ b/.history/redux/user/asyncActions_20220702143411.ts @@ -0,0 +1,13 @@ +import { createAsyncThunk } from '@reduxjs/toolkit'; +import axios from 'axios'; +import { User } from './types'; + +export const fetchUser = createAsyncThunk( + 'User/fetchUserStatus', + async () => { + const { data } = await axios.get(`/api/loadingLegisteredCommands`); + // eslint-disable-next-line no-console + console.log('user %s', data); + return data; + }, + ); \ No newline at end of file diff --git a/.history/redux/user/asyncActions_20220702145235.ts b/.history/redux/user/asyncActions_20220702145235.ts new file mode 100644 index 0000000..54351ed --- /dev/null +++ b/.history/redux/user/asyncActions_20220702145235.ts @@ -0,0 +1,13 @@ +import { createAsyncThunk } from '@reduxjs/toolkit'; +import axios from 'axios'; +import { User } from './types'; + +export const fetchUser = createAsyncThunk( + 'User/fetchUserStatus', + async () => { + const { data } = await axios.get(`/api/loadingLegisteredCommands`); + // eslint-disable-next-line no-console + console.log(data); + return data; + }, + ); \ No newline at end of file diff --git a/.history/redux/user/index_20220702144133.ts b/.history/redux/user/index_20220702144133.ts new file mode 100644 index 0000000..e69de29 diff --git a/.history/redux/user/index_20220702144209.ts b/.history/redux/user/index_20220702144209.ts new file mode 100644 index 0000000..8b35dc7 --- /dev/null +++ b/.history/redux/user/index_20220702144209.ts @@ -0,0 +1,4 @@ +export * from './selectors'; +export * from './asyncActions'; +export * from './slice'; +export * from './types'; \ No newline at end of file diff --git a/.history/redux/user/selectors_20220702141523.ts b/.history/redux/user/selectors_20220702141523.ts new file mode 100644 index 0000000..e69de29 diff --git a/.history/redux/user/selectors_20220702141652.ts b/.history/redux/user/selectors_20220702141652.ts new file mode 100644 index 0000000..8367793 --- /dev/null +++ b/.history/redux/user/selectors_20220702141652.ts @@ -0,0 +1,3 @@ +import { RootState } from '../store'; + +export const selectTokenData = (state: RootState) => state.token; \ No newline at end of file diff --git a/.history/redux/user/selectors_20220702143234.ts b/.history/redux/user/selectors_20220702143234.ts new file mode 100644 index 0000000..9b9f9c4 --- /dev/null +++ b/.history/redux/user/selectors_20220702143234.ts @@ -0,0 +1,4 @@ +import { RootState } from '../store'; + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export const selectCategoriesData = (state: RootState) => state.userSlice; \ No newline at end of file diff --git a/.history/redux/user/selectors_20220702144446.ts b/.history/redux/user/selectors_20220702144446.ts new file mode 100644 index 0000000..cb81ec3 --- /dev/null +++ b/.history/redux/user/selectors_20220702144446.ts @@ -0,0 +1,4 @@ +import { RootState } from '../store'; + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export const selectUserData = (state: RootState) => state.userSlice; \ No newline at end of file diff --git a/.history/redux/user/slice_20220702141516.ts b/.history/redux/user/slice_20220702141516.ts new file mode 100644 index 0000000..e69de29 diff --git a/.history/redux/user/slice_20220702141644.ts b/.history/redux/user/slice_20220702141644.ts new file mode 100644 index 0000000..7f2c59e --- /dev/null +++ b/.history/redux/user/slice_20220702141644.ts @@ -0,0 +1,38 @@ +import { createSlice, PayloadAction } from '@reduxjs/toolkit'; +import { fetchToken } from './asyncActions'; +import { Token, LoginSliceState, Status } from './types'; + +const initialState: LoginSliceState = { + token: [], + status_token: Status.LOADING, // loading | success | error +}; + +const tokenSlice = createSlice({ + name: 'token', + initialState, + reducers: { + setItems(state, action: PayloadAction) { + state.token = action.payload; + }, + }, + extraReducers: (builder) => { + builder.addCase(fetchToken.pending, (state, action) => { + state.token = []; + state.status_token = Status.LOADING; + }); + + builder.addCase(fetchToken.fulfilled, (state, action) => { + state.token = action.payload; + state.status_token = Status.SUCCESS; + }); + + builder.addCase(fetchToken.rejected, (state, action) => { + state.status_token = Status.ERROR; + state.token = []; + }); + }, +}); + +export const { setItems } = tokenSlice.actions; + +export default tokenSlice.reducer; \ No newline at end of file diff --git a/.history/redux/user/slice_20220702142937.ts b/.history/redux/user/slice_20220702142937.ts new file mode 100644 index 0000000..615d895 --- /dev/null +++ b/.history/redux/user/slice_20220702142937.ts @@ -0,0 +1,39 @@ +import { createSlice, PayloadAction } from '@reduxjs/toolkit'; +import { fetchUser } from './asyncActions'; +import { User, Status, UserSliceState } from './types'; + +const initialState: UserSliceState = { + user_items: [], + user_status: Status.LOADING, // loading | success | error +}; + +const userSlice = createSlice({ + name: 'categories', + initialState, + reducers: { + setUser(user_status, action: PayloadAction) { + user_status.user_items = action.payload; + }, + }, + + extraReducers: (builder) => { + builder.addCase(fetchUser.pending, (user_status) => { + user_status.user_status = Status.LOADING; + user_status.user_items = []; + }); + + builder.addCase(fetchUser.fulfilled, (user_status, action) => { + user_status.user_status = Status.SUCCESS; + user_status.user_items = action.payload; + }); + + builder.addCase(fetchUser.rejected, (user_status) => { + user_status.user_status = Status.ERROR; + user_status.user_items = []; + }); + }, +}); + +export const { setUser } = userSlice.actions; + +export default userSlice.reducer; \ No newline at end of file diff --git a/.history/redux/user/types_20220702141510.ts b/.history/redux/user/types_20220702141510.ts new file mode 100644 index 0000000..e69de29 diff --git a/.history/redux/user/types_20220702142322.ts b/.history/redux/user/types_20220702142322.ts new file mode 100644 index 0000000..2652df7 --- /dev/null +++ b/.history/redux/user/types_20220702142322.ts @@ -0,0 +1,21 @@ +export type User = { + team_name: string; + name_team_coach: string; + training_institution_team: string; + name_first_participant: string; + name_second_participant: string; + name_third_party: string; + class: string[]; + + }; + + export enum Status { + LOADING = 'loading', + SUCCESS = 'completed', + ERROR = 'error', + } + + export interface UserSliceState { + user_items: User[]; + user_status: Status; + } \ No newline at end of file diff --git a/.history/redux/user/types_20220702145846.ts b/.history/redux/user/types_20220702145846.ts new file mode 100644 index 0000000..9be5052 --- /dev/null +++ b/.history/redux/user/types_20220702145846.ts @@ -0,0 +1,21 @@ +export type User = { + team_name: string; + name_team_coach: string; + training_institution_team: string; + name_first_participant: string; + name_second_participant: string; + name_third_party: string; + classTeam: string[]; + + }; + + export enum Status { + LOADING = 'loading', + SUCCESS = 'completed', + ERROR = 'error', + } + + export interface UserSliceState { + user_items: User[]; + user_status: Status; + } \ No newline at end of file diff --git a/.history/server/db/connect_20220613162331.ts b/.history/server/db/connect_20220613162331.ts new file mode 100644 index 0000000..e69de29 diff --git a/.history/server/db/connect_20220613162536.ts b/.history/server/db/connect_20220613162536.ts new file mode 100644 index 0000000..612da2c --- /dev/null +++ b/.history/server/db/connect_20220613162536.ts @@ -0,0 +1,13 @@ +import mysql from "mysql2"; + +var pool = mysql.createPool({ + host: process.env.HOST, + user: process.env.DATABASE, + database: process.env.DATABASE, + password: process.env.PASSWORD, + waitForConnections: true, + connectionLimit: 10, + queueLimit: 0 +}); + +module.exports = pool; \ No newline at end of file diff --git a/.history/server/db/connect_20220613182535.ts b/.history/server/db/connect_20220613182535.ts new file mode 100644 index 0000000..d7b48c7 --- /dev/null +++ b/.history/server/db/connect_20220613182535.ts @@ -0,0 +1,13 @@ +import mysql from "mysql2"; + +const pool = mysql.createPool({ + host: process.env.HOST, + user: process.env.DATABASE, + database: process.env.DATABASE, + password: process.env.PASSWORD, + waitForConnections: true, + connectionLimit: 10, + queueLimit: 0 +}); + +module.exports = pool; \ No newline at end of file diff --git a/.history/server/db/connect_20220613182655.ts b/.history/server/db/connect_20220613182655.ts new file mode 100644 index 0000000..3d0f2c6 --- /dev/null +++ b/.history/server/db/connect_20220613182655.ts @@ -0,0 +1,14 @@ +import mysql from "mysql2"; + +const pool = mysql.createPool({ + host: process.env.HOST, + user: process.env.DATABASE, + database: process.env.DATABASE, + password: process.env.PASSWORD, + waitForConnections: true, + connectionLimit: 10, + queueLimit: 0 +}); + +console.log(poll); +module.exports = pool; \ No newline at end of file diff --git a/.history/server/db/connect_20220613182705.ts b/.history/server/db/connect_20220613182705.ts new file mode 100644 index 0000000..5dbe48d --- /dev/null +++ b/.history/server/db/connect_20220613182705.ts @@ -0,0 +1,14 @@ +import mysql from "mysql2"; + +const pool = mysql.createPool({ + host: process.env.HOST, + user: process.env.DATABASE, + database: process.env.DATABASE, + password: process.env.PASSWORD, + waitForConnections: true, + connectionLimit: 10, + queueLimit: 0 +}); + +console.log(pool); +module.exports = pool; \ No newline at end of file diff --git a/.history/server/db/connect_20220613182743.ts b/.history/server/db/connect_20220613182743.ts new file mode 100644 index 0000000..d7b48c7 --- /dev/null +++ b/.history/server/db/connect_20220613182743.ts @@ -0,0 +1,13 @@ +import mysql from "mysql2"; + +const pool = mysql.createPool({ + host: process.env.HOST, + user: process.env.DATABASE, + database: process.env.DATABASE, + password: process.env.PASSWORD, + waitForConnections: true, + connectionLimit: 10, + queueLimit: 0 +}); + +module.exports = pool; \ No newline at end of file diff --git a/.history/server/db/connect_20220613183208.ts b/.history/server/db/connect_20220613183208.ts new file mode 100644 index 0000000..d7b48c7 --- /dev/null +++ b/.history/server/db/connect_20220613183208.ts @@ -0,0 +1,13 @@ +import mysql from "mysql2"; + +const pool = mysql.createPool({ + host: process.env.HOST, + user: process.env.DATABASE, + database: process.env.DATABASE, + password: process.env.PASSWORD, + waitForConnections: true, + connectionLimit: 10, + queueLimit: 0 +}); + +module.exports = pool; \ No newline at end of file diff --git a/.history/server/db/insert_20220614072700.ts b/.history/server/db/insert_20220614072700.ts new file mode 100644 index 0000000..e69de29 diff --git a/.history/server/db/insert_20220614073054.ts b/.history/server/db/insert_20220614073054.ts new file mode 100644 index 0000000..54f5e48 --- /dev/null +++ b/.history/server/db/insert_20220614073054.ts @@ -0,0 +1,23 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, OkPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Insert(sql: string, argument: string, callback: definitionInterface) { + pool.execute(sql, argument, (err: QueryError, result: OkPacket) => { + callback(result.affectedRows); + pool.releaseConnection(pool); + }); +} + +/*export default function Select(sql: string, callback: definitionInterface) { + pool.getConnection(function(err, conn) { + conn.query(sql , function(err, rows) { + callback(rows); + }); + + }) + + }*/ \ No newline at end of file diff --git a/.history/server/db/insert_20220614073537.ts b/.history/server/db/insert_20220614073537.ts new file mode 100644 index 0000000..de8dbfa --- /dev/null +++ b/.history/server/db/insert_20220614073537.ts @@ -0,0 +1,24 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, OkPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Insert(sql: string, argument: string[], callback: definitionInterface) { + console.log(argument); + pool.execute(sql, argument, (err: QueryError, result: OkPacket) => { + callback(result.affectedRows); + pool.releaseConnection(pool); + }); +} + +/*export default function Select(sql: string, callback: definitionInterface) { + pool.getConnection(function(err, conn) { + conn.query(sql , function(err, rows) { + callback(rows); + }); + + }) + + }*/ \ No newline at end of file diff --git a/.history/server/db/insert_20220614073643.ts b/.history/server/db/insert_20220614073643.ts new file mode 100644 index 0000000..91634e3 --- /dev/null +++ b/.history/server/db/insert_20220614073643.ts @@ -0,0 +1,24 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, OkPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Insert(sql: string, argument: string[], callback: definitionInterface) { + console.log(argument); + pool.execute(sql, argument, (err: QueryError, result: OkPacket) => { + callback(result); + pool.releaseConnection(pool); + }); +} + +/*export default function Select(sql: string, callback: definitionInterface) { + pool.getConnection(function(err, conn) { + conn.query(sql , function(err, rows) { + callback(rows); + }); + + }) + + }*/ \ No newline at end of file diff --git a/.history/server/db/insert_20220614074019.ts b/.history/server/db/insert_20220614074019.ts new file mode 100644 index 0000000..c34b7a3 --- /dev/null +++ b/.history/server/db/insert_20220614074019.ts @@ -0,0 +1,25 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, OkPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Insert(sql: string, argument: string[], callback: definitionInterface) { + console.log(argument); + callback(argument); + // pool.execute(sql, argument, (err: QueryError, result: OkPacket) => { + // callback(result); + // pool.releaseConnection(pool); + // }); +} + +/*export default function Select(sql: string, callback: definitionInterface) { + pool.getConnection(function(err, conn) { + conn.query(sql , function(err, rows) { + callback(rows); + }); + + }) + + }*/ \ No newline at end of file diff --git a/.history/server/db/insert_20220701195924.ts b/.history/server/db/insert_20220701195924.ts new file mode 100644 index 0000000..6558aaf --- /dev/null +++ b/.history/server/db/insert_20220701195924.ts @@ -0,0 +1,15 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, OkPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Insert(sql: string, argument: string[], callback: definitionInterface) { + console.log(argument); + callback(argument); + pool.execute(sql, argument, (err: QueryError, result: OkPacket) => { + callback(result); + pool.releaseConnection(pool); + }); +} \ No newline at end of file diff --git a/.history/server/db/insert_20220701201242.ts b/.history/server/db/insert_20220701201242.ts new file mode 100644 index 0000000..97d067f --- /dev/null +++ b/.history/server/db/insert_20220701201242.ts @@ -0,0 +1,13 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Insert(sql: string, argument: string[], callback: definitionInterface) { + pool.execute(sql, argument, (err: QueryError, result) => { + callback(result); + pool.releaseConnection(pool); + }); +} \ No newline at end of file diff --git a/.history/server/db/insert_20220701201327.ts b/.history/server/db/insert_20220701201327.ts new file mode 100644 index 0000000..8d324d6 --- /dev/null +++ b/.history/server/db/insert_20220701201327.ts @@ -0,0 +1,12 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); + +interface definitionInterface{ + (message:string):void; +} +export default function Insert(sql: string, argument: string[], callback: definitionInterface) { + pool.execute(sql, argument, (result) => { + callback(result); + pool.releaseConnection(pool); + }); +} \ No newline at end of file diff --git a/.history/server/db/select_20220613162716.ts b/.history/server/db/select_20220613162716.ts new file mode 100644 index 0000000..e69de29 diff --git a/.history/server/db/select_20220613172333.ts b/.history/server/db/select_20220613172333.ts new file mode 100644 index 0000000..2faf68e --- /dev/null +++ b/.history/server/db/select_20220613172333.ts @@ -0,0 +1,15 @@ +// Загрузка категорий продукта +const pool = require("./connect"); + +const queryString = "SELECT name, types FROM product_categories WHERE status=1"; + +export default function handler(req, res) { + pool.getConnection(function(err, conn) { + // Do something with the connection + conn.query(queryString , function(err, rows) { + res.status(200).json(rows); + }); + // Don't forget to release the connection when finished! + pool.releaseConnection(conn); + }) +} \ No newline at end of file diff --git a/.history/server/db/select_20220613181443.ts b/.history/server/db/select_20220613181443.ts new file mode 100644 index 0000000..929c630 --- /dev/null +++ b/.history/server/db/select_20220613181443.ts @@ -0,0 +1,17 @@ +// Загрузка категорий продукта +const pool = require("./connect"); +interface definitionInterface{ + (message:string):void; +} + +export default function Select(sql, callback: definitionInterface) { + pool.getConnection(function(err, conn) { + // Do something with the connection + conn.query(sql , function(err, rows) { + callback(rows); + }); + // Don't forget to release the connection when finished! + pool.releaseConnection(conn); + }) + + } \ No newline at end of file diff --git a/.history/server/db/select_20220613181457.ts b/.history/server/db/select_20220613181457.ts new file mode 100644 index 0000000..6dfd20f --- /dev/null +++ b/.history/server/db/select_20220613181457.ts @@ -0,0 +1,17 @@ +// Загрузка категорий продукта +const pool = require("./connect"); +interface definitionInterface{ + (message:string):void; +} + +export default function Select(sql: string, callback: definitionInterface) { + pool.getConnection(function(err, conn) { + // Do something with the connection + conn.query(sql , function(err, rows) { + callback(rows); + }); + // Don't forget to release the connection when finished! + pool.releaseConnection(conn); + }) + + } \ No newline at end of file diff --git a/.history/server/db/select_20220613182632.ts b/.history/server/db/select_20220613182632.ts new file mode 100644 index 0000000..25da822 --- /dev/null +++ b/.history/server/db/select_20220613182632.ts @@ -0,0 +1,15 @@ +const pool = require("./connect"); + +interface definitionInterface{ + (message:string):void; +} + +export default function Select(sql: string, callback: definitionInterface) { + pool.getConnection(function(err, conn) { + conn.query(sql , function(err, rows) { + callback(rows); + }); + pool.releaseConnection(conn); + }) + + } \ No newline at end of file diff --git a/.history/server/db/select_20220613182757.ts b/.history/server/db/select_20220613182757.ts new file mode 100644 index 0000000..8142cc1 --- /dev/null +++ b/.history/server/db/select_20220613182757.ts @@ -0,0 +1,16 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); + +interface definitionInterface{ + (message:string):void; +} + +export default function Select(sql: string, callback: definitionInterface) { + pool.getConnection(function(err, conn) { + conn.query(sql , function(err, rows) { + callback(rows); + }); + pool.releaseConnection(conn); + }) + + } \ No newline at end of file diff --git a/.history/server/db/select_20220613183112.ts b/.history/server/db/select_20220613183112.ts new file mode 100644 index 0000000..9bbcfa4 --- /dev/null +++ b/.history/server/db/select_20220613183112.ts @@ -0,0 +1,41 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +//const pool = require("./connect"); +import {createConnection, QueryError, RowDataPacket} from 'mysql2'; + +/*const Pool = mysql.createPool({ + host: process.env.HOST, + user: process.env.DATABASE, + database: process.env.DATABASE, + password: process.env.PASSWORD, + waitForConnections: true, + connectionLimit: 10, + queueLimit: 0 +});*/ + +//interface definitionInterface{ +// (message:string):void; +//} + +const connection = createConnection({ + host: process.env.HOST, + user: process.env.DATABASE, + database: process.env.DATABASE, + password: process.env.PASSWORD, + waitForConnections: true, + connectionLimit: 10, + queueLimit: 0 +}); + +connection.query('SELECT * FROM `members` WHERE 1', (err: QueryError, rows: RowDataPacket[]) => { + console.log('The solution is: ', rows); +}); + +/*export default function Select(sql: string, callback: definitionInterface) { + pool.getConnection(function(err, conn) { + conn.query(sql , function(err, rows) { + callback(rows); + }); + pool.releaseConnection(conn); + }) + + }*/ \ No newline at end of file diff --git a/.history/server/db/select_20220613183305.ts b/.history/server/db/select_20220613183305.ts new file mode 100644 index 0000000..7d0c57f --- /dev/null +++ b/.history/server/db/select_20220613183305.ts @@ -0,0 +1,21 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, RowDataPacket} from 'mysql2'; + +/*interface definitionInterface{ + (message:string):void; +}*/ + +pool.query('SELECT * FROM `members` WHERE 1', (err: QueryError, rows: RowDataPacket[]) => { + console.log('The solution is: ', rows); +}); + +/*export default function Select(sql: string, callback: definitionInterface) { + pool.getConnection(function(err, conn) { + conn.query(sql , function(err, rows) { + callback(rows); + }); + pool.releaseConnection(conn); + }) + + }*/ \ No newline at end of file diff --git a/.history/server/db/select_20220613183408.ts b/.history/server/db/select_20220613183408.ts new file mode 100644 index 0000000..85cd10b --- /dev/null +++ b/.history/server/db/select_20220613183408.ts @@ -0,0 +1,22 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, RowDataPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Select(sql: string, callback: definitionInterface) { +pool.query('SELECT * FROM `members` WHERE 1', (err: QueryError, rows: RowDataPacket[]) => { + return callback(rows); +}); +} + +/*export default function Select(sql: string, callback: definitionInterface) { + pool.getConnection(function(err, conn) { + conn.query(sql , function(err, rows) { + callback(rows); + }); + pool.releaseConnection(conn); + }) + + }*/ \ No newline at end of file diff --git a/.history/server/db/select_20220613183701.ts b/.history/server/db/select_20220613183701.ts new file mode 100644 index 0000000..85cd10b --- /dev/null +++ b/.history/server/db/select_20220613183701.ts @@ -0,0 +1,22 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, RowDataPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Select(sql: string, callback: definitionInterface) { +pool.query('SELECT * FROM `members` WHERE 1', (err: QueryError, rows: RowDataPacket[]) => { + return callback(rows); +}); +} + +/*export default function Select(sql: string, callback: definitionInterface) { + pool.getConnection(function(err, conn) { + conn.query(sql , function(err, rows) { + callback(rows); + }); + pool.releaseConnection(conn); + }) + + }*/ \ No newline at end of file diff --git a/.history/server/db/select_20220613183713.ts b/.history/server/db/select_20220613183713.ts new file mode 100644 index 0000000..23cdaf0 --- /dev/null +++ b/.history/server/db/select_20220613183713.ts @@ -0,0 +1,22 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, RowDataPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Select(sql: string, callback: definitionInterface) { +pool.query('SELECT * FROM `members` WHERE 1', (err: QueryError, rows: RowDataPacket[]) => { + callback(rows); +}); +} + +/*export default function Select(sql: string, callback: definitionInterface) { + pool.getConnection(function(err, conn) { + conn.query(sql , function(err, rows) { + callback(rows); + }); + pool.releaseConnection(conn); + }) + + }*/ \ No newline at end of file diff --git a/.history/server/db/select_20220613183743.ts b/.history/server/db/select_20220613183743.ts new file mode 100644 index 0000000..d4d524e --- /dev/null +++ b/.history/server/db/select_20220613183743.ts @@ -0,0 +1,22 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, RowDataPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Select(sql: string, callback: definitionInterface) { +pool.query(sql, (err: QueryError, rows: RowDataPacket[]) => { + callback(rows); +}); +} + +/*export default function Select(sql: string, callback: definitionInterface) { + pool.getConnection(function(err, conn) { + conn.query(sql , function(err, rows) { + callback(rows); + }); + pool.releaseConnection(conn); + }) + + }*/ \ No newline at end of file diff --git a/.history/server/db/select_20220613183849.ts b/.history/server/db/select_20220613183849.ts new file mode 100644 index 0000000..e8b92b9 --- /dev/null +++ b/.history/server/db/select_20220613183849.ts @@ -0,0 +1,23 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, RowDataPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Select(sql: string, callback: definitionInterface) { +pool.query(sql, (err: QueryError, rows: RowDataPacket[]) => { + callback(rows); + console.log(rows); +}); +} + +/*export default function Select(sql: string, callback: definitionInterface) { + pool.getConnection(function(err, conn) { + conn.query(sql , function(err, rows) { + callback(rows); + }); + pool.releaseConnection(conn); + }) + + }*/ \ No newline at end of file diff --git a/.history/server/db/select_20220613183900.ts b/.history/server/db/select_20220613183900.ts new file mode 100644 index 0000000..11b8694 --- /dev/null +++ b/.history/server/db/select_20220613183900.ts @@ -0,0 +1,23 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, RowDataPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Select(sql: string, callback: definitionInterface) { +pool.query(sql, (err: QueryError, rows: RowDataPacket[]) => { + callback(rows); + console.log(err); +}); +} + +/*export default function Select(sql: string, callback: definitionInterface) { + pool.getConnection(function(err, conn) { + conn.query(sql , function(err, rows) { + callback(rows); + }); + pool.releaseConnection(conn); + }) + + }*/ \ No newline at end of file diff --git a/.history/server/db/select_20220614071530.ts b/.history/server/db/select_20220614071530.ts new file mode 100644 index 0000000..46fa38d --- /dev/null +++ b/.history/server/db/select_20220614071530.ts @@ -0,0 +1,23 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, RowDataPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Select(sql: string, callback: definitionInterface) { +pool.query(sql, (err: QueryError, rows: RowDataPacket[]) => { + callback(rows[0]); + console.log(rows[0]); +}); +} + +/*export default function Select(sql: string, callback: definitionInterface) { + pool.getConnection(function(err, conn) { + conn.query(sql , function(err, rows) { + callback(rows); + }); + pool.releaseConnection(conn); + }) + + }*/ \ No newline at end of file diff --git a/.history/server/db/select_20220614071621.ts b/.history/server/db/select_20220614071621.ts new file mode 100644 index 0000000..39a0e6d --- /dev/null +++ b/.history/server/db/select_20220614071621.ts @@ -0,0 +1,23 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, RowDataPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Select(sql: string, callback: definitionInterface) { +pool.query(sql, (err: QueryError, rows: RowDataPacket[]) => { + callback(rows[0]); + console.log(sql); +}); +} + +/*export default function Select(sql: string, callback: definitionInterface) { + pool.getConnection(function(err, conn) { + conn.query(sql , function(err, rows) { + callback(rows); + }); + pool.releaseConnection(conn); + }) + + }*/ \ No newline at end of file diff --git a/.history/server/db/select_20220614071827.ts b/.history/server/db/select_20220614071827.ts new file mode 100644 index 0000000..d4d524e --- /dev/null +++ b/.history/server/db/select_20220614071827.ts @@ -0,0 +1,22 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, RowDataPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Select(sql: string, callback: definitionInterface) { +pool.query(sql, (err: QueryError, rows: RowDataPacket[]) => { + callback(rows); +}); +} + +/*export default function Select(sql: string, callback: definitionInterface) { + pool.getConnection(function(err, conn) { + conn.query(sql , function(err, rows) { + callback(rows); + }); + pool.releaseConnection(conn); + }) + + }*/ \ No newline at end of file diff --git a/.history/server/db/select_20220614071933.ts b/.history/server/db/select_20220614071933.ts new file mode 100644 index 0000000..727d1fe --- /dev/null +++ b/.history/server/db/select_20220614071933.ts @@ -0,0 +1,23 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, RowDataPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Select(sql: string, callback: definitionInterface) { + pool.query(sql, (err: QueryError, rows: RowDataPacket[]) => { + callback(rows); + pool.releaseConnection(pool); +}); +} + +/*export default function Select(sql: string, callback: definitionInterface) { + pool.getConnection(function(err, conn) { + conn.query(sql , function(err, rows) { + callback(rows); + }); + + }) + + }*/ \ No newline at end of file diff --git a/.history/server/db/select_20220701195836.ts b/.history/server/db/select_20220701195836.ts new file mode 100644 index 0000000..887fe50 --- /dev/null +++ b/.history/server/db/select_20220701195836.ts @@ -0,0 +1,12 @@ +const pool = require("./connect"); +import {QueryError, RowDataPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Select(sql: string, callback: definitionInterface) { + pool.query(sql, (err: QueryError, rows: RowDataPacket[]) => { + callback(rows); + pool.releaseConnection(pool); +}); +} \ No newline at end of file diff --git a/.history/server/db/select_20220701200115.ts b/.history/server/db/select_20220701200115.ts new file mode 100644 index 0000000..88935d1 --- /dev/null +++ b/.history/server/db/select_20220701200115.ts @@ -0,0 +1,13 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, RowDataPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Select(sql: string, callback: definitionInterface) { + pool.query(sql, (err: QueryError, rows: RowDataPacket[]) => { + callback(rows); + pool.releaseConnection(pool); +}); +} \ No newline at end of file diff --git a/.history/server/db/select_20220701201341.ts b/.history/server/db/select_20220701201341.ts new file mode 100644 index 0000000..47199df --- /dev/null +++ b/.history/server/db/select_20220701201341.ts @@ -0,0 +1,12 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); + +interface definitionInterface{ + (message:string):void; +} +export default function Select(sql: string, callback: definitionInterface) { + pool.query(sql, (rows) => { + callback(rows); + pool.releaseConnection(pool); +}); +} \ No newline at end of file diff --git a/.history/server/db/select_20220701201351.ts b/.history/server/db/select_20220701201351.ts new file mode 100644 index 0000000..144f78e --- /dev/null +++ b/.history/server/db/select_20220701201351.ts @@ -0,0 +1,13 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); + +interface definitionInterface{ + (message:string):void; +} + +export default function Select(sql: string, callback: definitionInterface) { + pool.query(sql, (rows) => { + callback(rows); + pool.releaseConnection(pool); + }); +} \ No newline at end of file diff --git a/.history/server/db/select_20220701201510.ts b/.history/server/db/select_20220701201510.ts new file mode 100644 index 0000000..8f0012e --- /dev/null +++ b/.history/server/db/select_20220701201510.ts @@ -0,0 +1,13 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, RowDataPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Select(sql: string, callback: definitionInterface) { + pool.query(sql, ( rows: RowDataPacket[]) => { + callback(rows); + pool.releaseConnection(pool); +}); +} \ No newline at end of file diff --git a/.history/server/db/select_20220701201529.ts b/.history/server/db/select_20220701201529.ts new file mode 100644 index 0000000..4383325 --- /dev/null +++ b/.history/server/db/select_20220701201529.ts @@ -0,0 +1,13 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, RowDataPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Select(sql: string, callback: definitionInterface) { + pool.query(sql, (err: QueryError, rows: RowDataPacket[]) => { + callback(err); + pool.releaseConnection(pool); +}); +} \ No newline at end of file diff --git a/.history/server/db/select_20220701201545.ts b/.history/server/db/select_20220701201545.ts new file mode 100644 index 0000000..fe2f0e9 --- /dev/null +++ b/.history/server/db/select_20220701201545.ts @@ -0,0 +1,14 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, RowDataPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Select(sql: string, callback: definitionInterface) { + pool.query(sql, (err: QueryError, rows: RowDataPacket[]) => { + console.log(err); + callback(err); + pool.releaseConnection(pool); +}); +} \ No newline at end of file diff --git a/.history/server/db/select_20220701201554.ts b/.history/server/db/select_20220701201554.ts new file mode 100644 index 0000000..605be1b --- /dev/null +++ b/.history/server/db/select_20220701201554.ts @@ -0,0 +1,14 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, RowDataPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Select(sql: string, callback: definitionInterface) { + pool.query(sql, (err: QueryError, rows: RowDataPacket[]) => { + console.log(rows); + callback(err); + pool.releaseConnection(pool); +}); +} \ No newline at end of file diff --git a/.history/server/db/select_20220701201622.ts b/.history/server/db/select_20220701201622.ts new file mode 100644 index 0000000..de363c0 --- /dev/null +++ b/.history/server/db/select_20220701201622.ts @@ -0,0 +1,14 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {RowDataPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Select(sql: string, callback: definitionInterface) { + pool.query(sql, (rows: RowDataPacket[]) => { + console.log(rows); + callback(rows); + pool.releaseConnection(pool); +}); +} \ No newline at end of file diff --git a/.history/server/db/select_20220701201638.ts b/.history/server/db/select_20220701201638.ts new file mode 100644 index 0000000..605be1b --- /dev/null +++ b/.history/server/db/select_20220701201638.ts @@ -0,0 +1,14 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, RowDataPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Select(sql: string, callback: definitionInterface) { + pool.query(sql, (err: QueryError, rows: RowDataPacket[]) => { + console.log(rows); + callback(err); + pool.releaseConnection(pool); +}); +} \ No newline at end of file diff --git a/.history/server/db/select_20220701201646.ts b/.history/server/db/select_20220701201646.ts new file mode 100644 index 0000000..4ec14ed --- /dev/null +++ b/.history/server/db/select_20220701201646.ts @@ -0,0 +1,14 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, RowDataPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Select(sql: string, callback: definitionInterface) { + pool.query(sql, (err: QueryError, rows: RowDataPacket[]) => { + console.log(rows); + callback(rows); + pool.releaseConnection(pool); +}); +} \ No newline at end of file diff --git a/.history/server/db/select_20220701201654.ts b/.history/server/db/select_20220701201654.ts new file mode 100644 index 0000000..88935d1 --- /dev/null +++ b/.history/server/db/select_20220701201654.ts @@ -0,0 +1,13 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, RowDataPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Select(sql: string, callback: definitionInterface) { + pool.query(sql, (err: QueryError, rows: RowDataPacket[]) => { + callback(rows); + pool.releaseConnection(pool); +}); +} \ No newline at end of file diff --git a/.history/styles/globals_20210629061557.css b/.history/styles/globals_20210629061557.css new file mode 100644 index 0000000..a33749b --- /dev/null +++ b/.history/styles/globals_20210629061557.css @@ -0,0 +1,115 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + h1 { + @apply mb-6 text-3xl font-semibold; + } + h2 { + @apply text-2xl font-semibold; + } + p { + @apply mb-4; + } + a { + @apply text-blue-500 hover:text-blue-400 dark:text-blue-400 dark:hover:text-blue-300; + } +} + +/* Post styles */ +.prose pre { + @apply bg-gray-50 border border-gray-200 dark:border-gray-700 dark:bg-gray-900; +} + +.prose code { + @apply text-gray-800 dark:text-gray-200 px-1 py-0.5 border border-gray-100 dark:border-gray-800 rounded-md bg-gray-100 dark:bg-gray-900; +} + +.prose img { + /* Don't apply styles to next/image */ + @apply m-0; +} + +/* Prism Styles */ +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + @apply text-gray-700 dark:text-gray-300; +} + +.token.punctuation { + @apply text-gray-700 dark:text-gray-300; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + @apply text-green-500; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + @apply text-purple-500; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + @apply text-yellow-500; +} + +.token.atrule, +.token.attr-value, +.token.keyword { + @apply text-blue-500; +} + +.token.function, +.token.class-name { + @apply text-pink-500; +} + +.token.regex, +.token.important, +.token.variable { + @apply text-yellow-500; +} + +code[class*='language-'], +pre[class*='language-'] { + @apply text-gray-800 dark:text-gray-50; +} + +pre::-webkit-scrollbar { + display: none; +} + +pre { + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ +} + +/* Remark Styles */ +.remark-code-title { + @apply text-gray-800 dark:text-gray-200 px-5 py-3 border border-b-0 border-gray-200 dark:border-gray-700 rounded-t bg-gray-200 dark:bg-gray-800 text-sm font-mono font-bold; +} + +.remark-code-title + pre { + @apply mt-0 rounded-t-none; +} + +.mdx-marker { + @apply block -mx-4 px-4 bg-gray-100 dark:bg-gray-800 border-l-4 border-blue-500; +} diff --git a/.history/styles/globals_20220702185023.css b/.history/styles/globals_20220702185023.css new file mode 100644 index 0000000..76c5e5e --- /dev/null +++ b/.history/styles/globals_20220702185023.css @@ -0,0 +1,116 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + h1 { + @apply mb-6 text-3xl font-semibold; + } + h2 { + @apply text-2xl font-semibold; + } + p { + @apply mb-4; + } + a { + @apply text-blue-500 hover:text-blue-400 dark:text-blue-400 dark:hover:text-blue-300; + } +} + +/* Post styles */ +.prose pre { + @apply bg-gray-50 border border-gray-200 dark:border-gray-700 dark:bg-gray-900; +} + +.prose code { + @apply text-gray-800 dark:text-gray-200 px-1 py-0.5 border border-gray-100 dark:border-gray-800 rounded-md bg-gray-100 dark:bg-gray-900; +} + +.prose img { + /* Don't apply styles to next/image */ + margin: 0 auto; + @apply m-0; +} + +/* Prism Styles */ +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + @apply text-gray-700 dark:text-gray-300; +} + +.token.punctuation { + @apply text-gray-700 dark:text-gray-300; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + @apply text-green-500; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + @apply text-purple-500; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + @apply text-yellow-500; +} + +.token.atrule, +.token.attr-value, +.token.keyword { + @apply text-blue-500; +} + +.token.function, +.token.class-name { + @apply text-pink-500; +} + +.token.regex, +.token.important, +.token.variable { + @apply text-yellow-500; +} + +code[class*='language-'], +pre[class*='language-'] { + @apply text-gray-800 dark:text-gray-50; +} + +pre::-webkit-scrollbar { + display: none; +} + +pre { + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ +} + +/* Remark Styles */ +.remark-code-title { + @apply text-gray-800 dark:text-gray-200 px-5 py-3 border border-b-0 border-gray-200 dark:border-gray-700 rounded-t bg-gray-200 dark:bg-gray-800 text-sm font-mono font-bold; +} + +.remark-code-title + pre { + @apply mt-0 rounded-t-none; +} + +.mdx-marker { + @apply block -mx-4 px-4 bg-gray-100 dark:bg-gray-800 border-l-4 border-blue-500; +} diff --git a/.history/styles/globals_20220702185027.css b/.history/styles/globals_20220702185027.css new file mode 100644 index 0000000..a33749b --- /dev/null +++ b/.history/styles/globals_20220702185027.css @@ -0,0 +1,115 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + h1 { + @apply mb-6 text-3xl font-semibold; + } + h2 { + @apply text-2xl font-semibold; + } + p { + @apply mb-4; + } + a { + @apply text-blue-500 hover:text-blue-400 dark:text-blue-400 dark:hover:text-blue-300; + } +} + +/* Post styles */ +.prose pre { + @apply bg-gray-50 border border-gray-200 dark:border-gray-700 dark:bg-gray-900; +} + +.prose code { + @apply text-gray-800 dark:text-gray-200 px-1 py-0.5 border border-gray-100 dark:border-gray-800 rounded-md bg-gray-100 dark:bg-gray-900; +} + +.prose img { + /* Don't apply styles to next/image */ + @apply m-0; +} + +/* Prism Styles */ +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + @apply text-gray-700 dark:text-gray-300; +} + +.token.punctuation { + @apply text-gray-700 dark:text-gray-300; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + @apply text-green-500; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + @apply text-purple-500; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + @apply text-yellow-500; +} + +.token.atrule, +.token.attr-value, +.token.keyword { + @apply text-blue-500; +} + +.token.function, +.token.class-name { + @apply text-pink-500; +} + +.token.regex, +.token.important, +.token.variable { + @apply text-yellow-500; +} + +code[class*='language-'], +pre[class*='language-'] { + @apply text-gray-800 dark:text-gray-50; +} + +pre::-webkit-scrollbar { + display: none; +} + +pre { + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ +} + +/* Remark Styles */ +.remark-code-title { + @apply text-gray-800 dark:text-gray-200 px-5 py-3 border border-b-0 border-gray-200 dark:border-gray-700 rounded-t bg-gray-200 dark:bg-gray-800 text-sm font-mono font-bold; +} + +.remark-code-title + pre { + @apply mt-0 rounded-t-none; +} + +.mdx-marker { + @apply block -mx-4 px-4 bg-gray-100 dark:bg-gray-800 border-l-4 border-blue-500; +} diff --git a/.history/styles/globals_20220702185511.css b/.history/styles/globals_20220702185511.css new file mode 100644 index 0000000..492d548 --- /dev/null +++ b/.history/styles/globals_20220702185511.css @@ -0,0 +1,118 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + h1 { + @apply mb-6 text-3xl font-semibold; + } + h2 { + @apply text-2xl font-semibold; + } + p { + @apply mb-4; + } + a { + @apply text-blue-500 hover:text-blue-400 dark:text-blue-400 dark:hover:text-blue-300; + } +} + +/* Post styles */ +.prose { + max-width: 100vh; +} +.prose pre { + @apply bg-gray-50 border border-gray-200 dark:border-gray-700 dark:bg-gray-900; +} + +.prose code { + @apply text-gray-800 dark:text-gray-200 px-1 py-0.5 border border-gray-100 dark:border-gray-800 rounded-md bg-gray-100 dark:bg-gray-900; +} + +.prose img { + /* Don't apply styles to next/image */ + @apply m-0; +} + +/* Prism Styles */ +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + @apply text-gray-700 dark:text-gray-300; +} + +.token.punctuation { + @apply text-gray-700 dark:text-gray-300; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + @apply text-green-500; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + @apply text-purple-500; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + @apply text-yellow-500; +} + +.token.atrule, +.token.attr-value, +.token.keyword { + @apply text-blue-500; +} + +.token.function, +.token.class-name { + @apply text-pink-500; +} + +.token.regex, +.token.important, +.token.variable { + @apply text-yellow-500; +} + +code[class*='language-'], +pre[class*='language-'] { + @apply text-gray-800 dark:text-gray-50; +} + +pre::-webkit-scrollbar { + display: none; +} + +pre { + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ +} + +/* Remark Styles */ +.remark-code-title { + @apply text-gray-800 dark:text-gray-200 px-5 py-3 border border-b-0 border-gray-200 dark:border-gray-700 rounded-t bg-gray-200 dark:bg-gray-800 text-sm font-mono font-bold; +} + +.remark-code-title + pre { + @apply mt-0 rounded-t-none; +} + +.mdx-marker { + @apply block -mx-4 px-4 bg-gray-100 dark:bg-gray-800 border-l-4 border-blue-500; +} diff --git a/.history/styles/globals_20220702185759.css b/.history/styles/globals_20220702185759.css new file mode 100644 index 0000000..79d54eb --- /dev/null +++ b/.history/styles/globals_20220702185759.css @@ -0,0 +1,122 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + h1 { + @apply mb-6 text-3xl font-semibold; + } + h2 { + @apply text-2xl font-semibold; + } + p { + @apply mb-4; + } + a { + @apply text-blue-500 hover:text-blue-400 dark:text-blue-400 dark:hover:text-blue-300; + } +} + +/* Post styles */ +.prose { + max-width: 100vh; +} +.prose pre { + @apply bg-gray-50 border border-gray-200 dark:border-gray-700 dark:bg-gray-900; +} + +.prose code { + @apply text-gray-800 dark:text-gray-200 px-1 py-0.5 border border-gray-100 dark:border-gray-800 rounded-md bg-gray-100 dark:bg-gray-900; +} + +.prose img { + /* Don't apply styles to next/image */ + display: block; + margin-left: auto; + margin-right: auto; + width: 50%; + @apply m-0; +} + +/* Prism Styles */ +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + @apply text-gray-700 dark:text-gray-300; +} + +.token.punctuation { + @apply text-gray-700 dark:text-gray-300; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + @apply text-green-500; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + @apply text-purple-500; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + @apply text-yellow-500; +} + +.token.atrule, +.token.attr-value, +.token.keyword { + @apply text-blue-500; +} + +.token.function, +.token.class-name { + @apply text-pink-500; +} + +.token.regex, +.token.important, +.token.variable { + @apply text-yellow-500; +} + +code[class*='language-'], +pre[class*='language-'] { + @apply text-gray-800 dark:text-gray-50; +} + +pre::-webkit-scrollbar { + display: none; +} + +pre { + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ +} + +/* Remark Styles */ +.remark-code-title { + @apply text-gray-800 dark:text-gray-200 px-5 py-3 border border-b-0 border-gray-200 dark:border-gray-700 rounded-t bg-gray-200 dark:bg-gray-800 text-sm font-mono font-bold; +} + +.remark-code-title + pre { + @apply mt-0 rounded-t-none; +} + +.mdx-marker { + @apply block -mx-4 px-4 bg-gray-100 dark:bg-gray-800 border-l-4 border-blue-500; +} diff --git a/.history/styles/globals_20220702185825.css b/.history/styles/globals_20220702185825.css new file mode 100644 index 0000000..62af744 --- /dev/null +++ b/.history/styles/globals_20220702185825.css @@ -0,0 +1,121 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + h1 { + @apply mb-6 text-3xl font-semibold; + } + h2 { + @apply text-2xl font-semibold; + } + p { + @apply mb-4; + } + a { + @apply text-blue-500 hover:text-blue-400 dark:text-blue-400 dark:hover:text-blue-300; + } +} + +/* Post styles */ +.prose { + max-width: 100vh; +} +.prose pre { + @apply bg-gray-50 border border-gray-200 dark:border-gray-700 dark:bg-gray-900; +} + +.prose code { + @apply text-gray-800 dark:text-gray-200 px-1 py-0.5 border border-gray-100 dark:border-gray-800 rounded-md bg-gray-100 dark:bg-gray-900; +} + +.prose img { + /* Don't apply styles to next/image */ + display: block; + margin-left: auto; + margin-right: auto; + width: 50%; +} + +/* Prism Styles */ +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + @apply text-gray-700 dark:text-gray-300; +} + +.token.punctuation { + @apply text-gray-700 dark:text-gray-300; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + @apply text-green-500; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + @apply text-purple-500; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + @apply text-yellow-500; +} + +.token.atrule, +.token.attr-value, +.token.keyword { + @apply text-blue-500; +} + +.token.function, +.token.class-name { + @apply text-pink-500; +} + +.token.regex, +.token.important, +.token.variable { + @apply text-yellow-500; +} + +code[class*='language-'], +pre[class*='language-'] { + @apply text-gray-800 dark:text-gray-50; +} + +pre::-webkit-scrollbar { + display: none; +} + +pre { + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ +} + +/* Remark Styles */ +.remark-code-title { + @apply text-gray-800 dark:text-gray-200 px-5 py-3 border border-b-0 border-gray-200 dark:border-gray-700 rounded-t bg-gray-200 dark:bg-gray-800 text-sm font-mono font-bold; +} + +.remark-code-title + pre { + @apply mt-0 rounded-t-none; +} + +.mdx-marker { + @apply block -mx-4 px-4 bg-gray-100 dark:bg-gray-800 border-l-4 border-blue-500; +} diff --git a/.history/styles/globals_20220702185903.css b/.history/styles/globals_20220702185903.css new file mode 100644 index 0000000..492d548 --- /dev/null +++ b/.history/styles/globals_20220702185903.css @@ -0,0 +1,118 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + h1 { + @apply mb-6 text-3xl font-semibold; + } + h2 { + @apply text-2xl font-semibold; + } + p { + @apply mb-4; + } + a { + @apply text-blue-500 hover:text-blue-400 dark:text-blue-400 dark:hover:text-blue-300; + } +} + +/* Post styles */ +.prose { + max-width: 100vh; +} +.prose pre { + @apply bg-gray-50 border border-gray-200 dark:border-gray-700 dark:bg-gray-900; +} + +.prose code { + @apply text-gray-800 dark:text-gray-200 px-1 py-0.5 border border-gray-100 dark:border-gray-800 rounded-md bg-gray-100 dark:bg-gray-900; +} + +.prose img { + /* Don't apply styles to next/image */ + @apply m-0; +} + +/* Prism Styles */ +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + @apply text-gray-700 dark:text-gray-300; +} + +.token.punctuation { + @apply text-gray-700 dark:text-gray-300; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + @apply text-green-500; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + @apply text-purple-500; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + @apply text-yellow-500; +} + +.token.atrule, +.token.attr-value, +.token.keyword { + @apply text-blue-500; +} + +.token.function, +.token.class-name { + @apply text-pink-500; +} + +.token.regex, +.token.important, +.token.variable { + @apply text-yellow-500; +} + +code[class*='language-'], +pre[class*='language-'] { + @apply text-gray-800 dark:text-gray-50; +} + +pre::-webkit-scrollbar { + display: none; +} + +pre { + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ +} + +/* Remark Styles */ +.remark-code-title { + @apply text-gray-800 dark:text-gray-200 px-5 py-3 border border-b-0 border-gray-200 dark:border-gray-700 rounded-t bg-gray-200 dark:bg-gray-800 text-sm font-mono font-bold; +} + +.remark-code-title + pre { + @apply mt-0 rounded-t-none; +} + +.mdx-marker { + @apply block -mx-4 px-4 bg-gray-100 dark:bg-gray-800 border-l-4 border-blue-500; +} diff --git a/.history/styles/globals_20220702185917.css b/.history/styles/globals_20220702185917.css new file mode 100644 index 0000000..7a2e46e --- /dev/null +++ b/.history/styles/globals_20220702185917.css @@ -0,0 +1,116 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + h1 { + @apply mb-6 text-3xl font-semibold; + } + h2 { + @apply text-2xl font-semibold; + } + p { + @apply mb-4; + } + a { + @apply text-blue-500 hover:text-blue-400 dark:text-blue-400 dark:hover:text-blue-300; + } +} + +/* Post styles */ + +.prose pre { + @apply bg-gray-50 border border-gray-200 dark:border-gray-700 dark:bg-gray-900; +} + +.prose code { + @apply text-gray-800 dark:text-gray-200 px-1 py-0.5 border border-gray-100 dark:border-gray-800 rounded-md bg-gray-100 dark:bg-gray-900; +} + +.prose img { + /* Don't apply styles to next/image */ + @apply m-0; +} + +/* Prism Styles */ +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + @apply text-gray-700 dark:text-gray-300; +} + +.token.punctuation { + @apply text-gray-700 dark:text-gray-300; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + @apply text-green-500; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + @apply text-purple-500; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + @apply text-yellow-500; +} + +.token.atrule, +.token.attr-value, +.token.keyword { + @apply text-blue-500; +} + +.token.function, +.token.class-name { + @apply text-pink-500; +} + +.token.regex, +.token.important, +.token.variable { + @apply text-yellow-500; +} + +code[class*='language-'], +pre[class*='language-'] { + @apply text-gray-800 dark:text-gray-50; +} + +pre::-webkit-scrollbar { + display: none; +} + +pre { + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ +} + +/* Remark Styles */ +.remark-code-title { + @apply text-gray-800 dark:text-gray-200 px-5 py-3 border border-b-0 border-gray-200 dark:border-gray-700 rounded-t bg-gray-200 dark:bg-gray-800 text-sm font-mono font-bold; +} + +.remark-code-title + pre { + @apply mt-0 rounded-t-none; +} + +.mdx-marker { + @apply block -mx-4 px-4 bg-gray-100 dark:bg-gray-800 border-l-4 border-blue-500; +} diff --git a/.history/styles/globals_20220702185936.css b/.history/styles/globals_20220702185936.css new file mode 100644 index 0000000..492d548 --- /dev/null +++ b/.history/styles/globals_20220702185936.css @@ -0,0 +1,118 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + h1 { + @apply mb-6 text-3xl font-semibold; + } + h2 { + @apply text-2xl font-semibold; + } + p { + @apply mb-4; + } + a { + @apply text-blue-500 hover:text-blue-400 dark:text-blue-400 dark:hover:text-blue-300; + } +} + +/* Post styles */ +.prose { + max-width: 100vh; +} +.prose pre { + @apply bg-gray-50 border border-gray-200 dark:border-gray-700 dark:bg-gray-900; +} + +.prose code { + @apply text-gray-800 dark:text-gray-200 px-1 py-0.5 border border-gray-100 dark:border-gray-800 rounded-md bg-gray-100 dark:bg-gray-900; +} + +.prose img { + /* Don't apply styles to next/image */ + @apply m-0; +} + +/* Prism Styles */ +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + @apply text-gray-700 dark:text-gray-300; +} + +.token.punctuation { + @apply text-gray-700 dark:text-gray-300; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + @apply text-green-500; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + @apply text-purple-500; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + @apply text-yellow-500; +} + +.token.atrule, +.token.attr-value, +.token.keyword { + @apply text-blue-500; +} + +.token.function, +.token.class-name { + @apply text-pink-500; +} + +.token.regex, +.token.important, +.token.variable { + @apply text-yellow-500; +} + +code[class*='language-'], +pre[class*='language-'] { + @apply text-gray-800 dark:text-gray-50; +} + +pre::-webkit-scrollbar { + display: none; +} + +pre { + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ +} + +/* Remark Styles */ +.remark-code-title { + @apply text-gray-800 dark:text-gray-200 px-5 py-3 border border-b-0 border-gray-200 dark:border-gray-700 rounded-t bg-gray-200 dark:bg-gray-800 text-sm font-mono font-bold; +} + +.remark-code-title + pre { + @apply mt-0 rounded-t-none; +} + +.mdx-marker { + @apply block -mx-4 px-4 bg-gray-100 dark:bg-gray-800 border-l-4 border-blue-500; +} diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..4c1112d --- /dev/null +++ b/.prettierignore @@ -0,0 +1,5 @@ +node_modules +.next +yarn.lock +package-lock.json +public diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..937375d --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +{ + "semi": true, + "singleQuote": true +} diff --git a/README.md b/README.md index f90e1ac..7a90798 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ -# NextJS - Typescript - MDX - Blog +# RoboTop - Сайт для робототехнического фестиваля -A Next.js starter for your next blog or personal site. Built with: \ No newline at end of file +Next.js \ No newline at end of file diff --git a/components/Head.tsx b/components/Head.tsx new file mode 100644 index 0000000..08f7526 --- /dev/null +++ b/components/Head.tsx @@ -0,0 +1,42 @@ +import NextHead from 'next/head'; +import { useRouter } from 'next/router'; +import React from 'react'; +import { MetaProps } from '../types/layout'; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Head = ({ customMeta }: { customMeta?: MetaProps }): JSX.Element => { + const router = useRouter(); + const meta: MetaProps = { + title: 'РоботТоп - робототехнический фестиваль', + description: + 'РоботТОП – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.', + image: `${WEBSITE_HOST_URL}/images/site-preview.png`, + type: 'website', + ...customMeta, + }; + + return ( + + {meta.title} + + + + + + + + + + + + + + {meta.date && ( + + )} + + ); +}; + +export default Head; diff --git a/components/Layout.tsx b/components/Layout.tsx new file mode 100644 index 0000000..28e5d07 --- /dev/null +++ b/components/Layout.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { MetaProps } from '../types/layout'; +import Head from './Head'; +import Navigation from './Navigation'; +import ThemeSwitch from './ThemeSwitch'; + +type LayoutProps = { + children: React.ReactNode; + customMeta?: MetaProps; +}; + +export const WEBSITE_HOST_URL = 'https://nextjs-typescript-mdx-blog.vercel.app'; + +const Layout = ({ children, customMeta }: LayoutProps): JSX.Element => { + return ( + <> + +
+
+
+ + +
+
+
+
+
{children}
+
+ + + ); +}; + +export default Layout; diff --git a/components/LoadingTeamsForm.tsx b/components/LoadingTeamsForm.tsx new file mode 100644 index 0000000..7524412 --- /dev/null +++ b/components/LoadingTeamsForm.tsx @@ -0,0 +1,53 @@ +import React from 'react'; + +type UserProps = { + team_name: string; + name_team_coach: string; + training_institution_team: string; + name_first_participant: string; + name_second_participant: string; + name_third_party: string; + classTeam: string[]; +}; + +export const LoadingTeamsForm : React.FC = ({ + team_name, + name_team_coach, + training_institution_team, + name_first_participant, + name_second_participant, + name_third_party, + classTeam +}) => { + + const flatten = (arr) => { + const arrOfNum = []; + arr.split(',').forEach(str => { + arrOfNum.push(Number(str)); + }); + + return Math.min.apply(null, arrOfNum.filter(Boolean)); //Math.min(...arrOfNum); + } + + return ( + + + {team_name} + + + {name_team_coach} + + + {training_institution_team} + + + {name_first_participant +', ' + name_second_participant + ', ' + name_third_party} + + + { flatten(classTeam)} + + + ); +}; + +export default LoadingTeamsForm; diff --git a/components/Navigation.tsx b/components/Navigation.tsx new file mode 100644 index 0000000..0870d7e --- /dev/null +++ b/components/Navigation.tsx @@ -0,0 +1,30 @@ +import Link from 'next/link'; +import React from 'react'; + +const Navigation = (): JSX.Element => { + return ( + + ); +}; + +export default Navigation; diff --git a/components/RegistrationForm.tsx b/components/RegistrationForm.tsx new file mode 100644 index 0000000..05e6c54 --- /dev/null +++ b/components/RegistrationForm.tsx @@ -0,0 +1,249 @@ +import React,{useRef} from 'react'; +import { useForm, SubmitHandler } from "react-hook-form"; + +interface IFormInputs { + firstName: string + lastName: string + coach_telefon_number: string +} + + +const alerError = (props) => { + return

{props}

+} + +export const RegistrationForm = (props): JSX.Element => { + const form = useRef(null); + const { register, handleSubmit, reset, formState: { errors } } = useForm(); + + const onSubmit: SubmitHandler = data => { + fetch('/api/registration', { method: 'POST', body: Object.values(data) }) + .then(props.updateData(2)) + reset(); + } + return ( + <> +
+
+
+
+

Регистрация команды

+

Введите актуальные данные команды

+

От каждого учебного заведения может быть зарегистрированно неограниченое количеставо команд

+

Подписывайтесь на наш Telegram канал , что-бы быть в курсе новосте про соревнование

. +
+
+
+
+
+
+
+
+ + + {errors.name_team_coach && alerError('Введите ФИО тренера команды') } +
+ +
+ + + {errors.coach_telefon_number && alerError('Введите номер телефона')} +
+ +
+ + ()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ })} + placeholder="you@example.com" + className="mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" + /> + {errors.trainer_mail && alerError('Введите коректный Email адресс') + } +
+ +
+ + + { errors.city_team && alerError('Введите город команды') } +
+ +
+ + + {errors.training_institution_team && alerError('Введите название учебного заведения') } +
+ +
+ + + {errors.team_name && alerError('Введите название команды') } +
+ +
+ + + {errors.name_first_participant && alerError('Введите ФИО участника') } +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+
+ +
+
+
+
+
+
+ + ); +}; + +export default RegistrationForm; diff --git a/components/ThemeSwitch.tsx b/components/ThemeSwitch.tsx new file mode 100644 index 0000000..8a434c8 --- /dev/null +++ b/components/ThemeSwitch.tsx @@ -0,0 +1,106 @@ +import { useTheme } from 'next-themes'; +import React from 'react'; + +/** + * Based off of gatsby-theme-novela + * https://github.com/narative/gatsby-theme-novela/blob/master/%40narative/gatsby-theme-novela/src/components/Navigation/Navigation.Header.tsx + */ + +const ThemeSwitch = (): JSX.Element => { + const [mounted, setMounted] = React.useState(false); + const { theme, setTheme } = useTheme(); + + // After mounting, we have access to the theme + React.useEffect(() => setMounted(true), []); + + if (!mounted) { + return null; + } + + const isDark = theme === 'dark'; + const color = isDark ? '#fff' : '#000'; + const maskColor = isDark ? '#000' : '#fff'; + return ( + + ); +}; + +export default ThemeSwitch; diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..162abff --- /dev/null +++ b/jest.config.js @@ -0,0 +1,17 @@ +module.exports = { + roots: [''], + moduleFileExtensions: ['ts', 'tsx', 'js', 'json', 'jsx'], + testPathIgnorePatterns: ['[/\\\\](node_modules|.next)[/\\\\]'], + transformIgnorePatterns: ['[/\\\\]node_modules[/\\\\].+\\.(ts|tsx)$'], + transform: { + '^.+\\.(ts|tsx)$': 'babel-jest', + }, + watchPlugins: [ + 'jest-watch-typeahead/filename', + 'jest-watch-typeahead/testname', + ], + moduleNameMapper: { + '\\.(css|less|sass|scss)$': 'identity-obj-proxy', + '\\.(gif|ttf|eot|svg|png)$': '/test/__mocks__/fileMock.js', + }, +}; diff --git a/lib/api.ts b/lib/api.ts new file mode 100644 index 0000000..72903b9 --- /dev/null +++ b/lib/api.ts @@ -0,0 +1,45 @@ +import fs from 'fs'; +import matter from 'gray-matter'; +import { join } from 'path'; +import { POSTS_PATH } from '../utils/mdxUtils'; + +export function getPostSlugs(): string[] { + return fs.readdirSync(POSTS_PATH); +} + +type PostItems = { + [key: string]: string; +}; + +export function getPostBySlug(slug: string, fields: string[] = []): PostItems { + const realSlug = slug.replace(/\.mdx$/, ''); + const fullPath = join(POSTS_PATH, `${realSlug}.mdx`); + const fileContents = fs.readFileSync(fullPath, 'utf8'); + const { data, content } = matter(fileContents); + + const items: PostItems = {}; + + // Ensure only the minimal needed data is exposed + fields.forEach((field) => { + if (field === 'slug') { + items[field] = realSlug; + } + if (field === 'content') { + items[field] = content; + } + if (data[field]) { + items[field] = data[field]; + } + }); + + return items; +} + +export function getAllPosts(fields: string[] = []): PostItems[] { + const slugs = getPostSlugs(); + const posts = slugs + .map((slug) => getPostBySlug(slug, fields)) + // sort posts by date in descending order + .sort((post1, post2) => (post1.date > post2.date ? -1 : 1)); + return posts; +} diff --git a/next-env.d.ts b/next-env.d.ts new file mode 100644 index 0000000..4f11a03 --- /dev/null +++ b/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/next.config.mjs b/next.config.mjs new file mode 100644 index 0000000..76b4d4d --- /dev/null +++ b/next.config.mjs @@ -0,0 +1,17 @@ +import nextMDX from '@next/mdx' +import remarkGfm from 'remark-gfm' +import remarkParse from 'remark-parse' +import remarkRehype from 'remark-rehype' +import rehypeStringify from 'rehype-stringify' + +const withMDX = nextMDX({ + extension: /\.mdx?$/, + options: { + remarkPlugins: [remarkGfm, remarkParse, remarkRehype], + rehypePlugins: [rehypeStringify], + }, +}) + +export default withMDX({ + pageExtensions: ['js', 'jsx', 'ts', 'tsx', 'md', 'mdx'], +}) \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..9bad60a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,23152 @@ +{ + "name": "nextjs-typescript-mdx-blog", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "nextjs-typescript-mdx-blog", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@headlessui/react": "^1.6.5", + "@heroicons/react": "^1.0.6", + "@next/mdx": "^12.2.0", + "@reduxjs/toolkit": "^1.8.3", + "@tailwindcss/typography": "^0.5.2", + "axios": "^0.27.2", + "date-fns": "^2.28.0", + "gray-matter": "^4.0.3", + "mdx-prism": "^0.3.4", + "mysql2": "^2.3.3", + "next": "^12.2.0", + "next-mdx-remote": "^4.0.3", + "next-themes": "^0.2.0", + "react": "^18.2.0", + "react-confirm-alert": "^3.0.2", + "react-dom": "^18.2.0", + "react-hook-form": "^7.33.1", + "react-redux": "^8.0.2", + "react-toastify": "^9.0.5", + "rehype-autolink-headings": "^6.1.1", + "rehype-slug": "^5.0.1", + "remark-code-titles": "^0.1.2", + "remark-gfm": "^3.0.1" + }, + "devDependencies": { + "@testing-library/react": "^13.3.0", + "@types/jest": "^28.1.4", + "@types/mysql2": "github:types/mysql2", + "@types/node": "^18.0.0", + "@types/react": "^18.0.14", + "@typescript-eslint/eslint-plugin": "^5.30.3", + "@typescript-eslint/parser": "^5.30.3", + "autoprefixer": "^10.4.7", + "babel-jest": "^28.1.2", + "eslint": "^8.19.0", + "eslint-config-next": "^12.2.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-react": "^7.30.1", + "husky": "^8.0.1", + "identity-obj-proxy": "^3.0.0", + "jest": "^28.1.2", + "jest-watch-typeahead": "^1.1.0", + "lint-staged": "^13.0.3", + "postcss": "^8.4.14", + "prettier": "^2.7.1", + "rehype": "^12.0.1", + "tailwindcss": "^3.1.4", + "typescript": "^4.7.4" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.6.tgz", + "integrity": "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.6.tgz", + "integrity": "sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.6", + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helpers": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", + "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz", + "integrity": "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz", + "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz", + "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz", + "integrity": "sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz", + "integrity": "sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.6.tgz", + "integrity": "sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz", + "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz", + "integrity": "sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.6.tgz", + "integrity": "sha512-cOu5wH2JFBgMjje+a+fz2JNIWU4GzYpl05oSob3UDvBEh6EuIn+TXFHMmBbhSb+k/4HMzgKCQfEEDArAWNF9Cw==", + "dev": true, + "dependencies": { + "core-js-pure": "^3.20.2", + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", + "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz", + "integrity": "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz", + "integrity": "sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@headlessui/react": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.6.5.tgz", + "integrity": "sha512-3VkKteDxlxf3fE0KbfO9t60KC1lM7YNpZggLpwzVNg1J/zwL+h+4N7MBlFDVpInZI3rKlZGpNx0PWsG/9c2vQg==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16 || ^17 || ^18", + "react-dom": "^16 || ^17 || ^18" + } + }, + "node_modules/@heroicons/react": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-1.0.6.tgz", + "integrity": "sha512-JJCXydOFWMDpCP4q13iEplA503MQO3xLoZiKum+955ZCtHINWnx26CUxVxxFQu/uLb4LW3ge15ZpzIkXKkJ8oQ==", + "peerDependencies": { + "react": ">= 16" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.1.tgz", + "integrity": "sha512-0RiUocPVFEm3WRMOStIHbRWllG6iW6E3/gUPnf4lkrVFyXIIDeCe+vlKeYyFOMhB2EPE6FLFCNADSOOQMaqvyA==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.1", + "jest-util": "^28.1.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/console/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/console/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/console/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/console/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/console/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/console/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/core": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.2.tgz", + "integrity": "sha512-Xo4E+Sb/nZODMGOPt2G3cMmCBqL4/W2Ijwr7/mrXlq4jdJwcFQ/9KrrJZT2adQRk2otVBXXOz1GRQ4Z5iOgvRQ==", + "dev": true, + "dependencies": { + "@jest/console": "^28.1.1", + "@jest/reporters": "^28.1.2", + "@jest/test-result": "^28.1.1", + "@jest/transform": "^28.1.2", + "@jest/types": "^28.1.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^28.0.2", + "jest-config": "^28.1.2", + "jest-haste-map": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.1", + "jest-resolve-dependencies": "^28.1.2", + "jest-runner": "^28.1.2", + "jest-runtime": "^28.1.2", + "jest-snapshot": "^28.1.2", + "jest-util": "^28.1.1", + "jest-validate": "^28.1.1", + "jest-watcher": "^28.1.1", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.1", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/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/core/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/core/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/core/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/core/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/core/node_modules/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/core/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/@jest/core/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/@jest/core/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/environment": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.2.tgz", + "integrity": "sha512-I0CR1RUMmOzd0tRpz10oUfaChBWs+/Hrvn5xYhMEF/ZqrDaaeHwS8yDBqEWCrEnkH2g+WE/6g90oBv3nKpcm8Q==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^28.1.2", + "@jest/types": "^28.1.1", + "@types/node": "*", + "jest-mock": "^28.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.2.tgz", + "integrity": "sha512-HBzyZBeFBiOelNbBKN0pilWbbrGvwDUwAqMC46NVJmWm8AVkuE58NbG1s7DR4cxFt4U5cVLxofAoHxgvC5MyOw==", + "dev": true, + "dependencies": { + "expect": "^28.1.1", + "jest-snapshot": "^28.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.1.tgz", + "integrity": "sha512-n/ghlvdhCdMI/hTcnn4qV57kQuV9OTsZzH1TTCVARANKhl6hXJqLKUkwX69ftMGpsbpt96SsDD8n8LD2d9+FRw==", + "dev": true, + "dependencies": { + "jest-get-type": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.2.tgz", + "integrity": "sha512-xSYEI7Y0D5FbZN2LsCUj/EKRR1zfQYmGuAUVh6xTqhx7V5JhjgMcK5Pa0iR6WIk0GXiHDe0Ke4A+yERKE9saqg==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.1", + "@sinonjs/fake-timers": "^9.1.2", + "@types/node": "*", + "jest-message-util": "^28.1.1", + "jest-mock": "^28.1.1", + "jest-util": "^28.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.2.tgz", + "integrity": "sha512-cz0lkJVDOtDaYhvT3Fv2U1B6FtBnV+OpEyJCzTHM1fdoTsU4QNLAt/H4RkiwEUU+dL4g/MFsoTuHeT2pvbo4Hg==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.2", + "@jest/expect": "^28.1.2", + "@jest/types": "^28.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.2.tgz", + "integrity": "sha512-/whGLhiwAqeCTmQEouSigUZJPVl7sW8V26EiboImL+UyXznnr1a03/YZ2BX8OlFw0n+Zlwu+EZAITZtaeRTxyA==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^28.1.1", + "@jest/test-result": "^28.1.1", + "@jest/transform": "^28.1.2", + "@jest/types": "^28.1.1", + "@jridgewell/trace-mapping": "^0.3.13", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^28.1.1", + "jest-util": "^28.1.1", + "jest-worker": "^28.1.1", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/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/reporters/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/reporters/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/reporters/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/reporters/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/reporters/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/schemas": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz", + "integrity": "sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.23.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", + "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.13", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.1.tgz", + "integrity": "sha512-hPmkugBktqL6rRzwWAtp1JtYT4VHwv8OQ+9lE5Gymj6dHzubI/oJHMUpPOt8NrdVWSrz9S7bHjJUmv2ggFoUNQ==", + "dev": true, + "dependencies": { + "@jest/console": "^28.1.1", + "@jest/types": "^28.1.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.1.tgz", + "integrity": "sha512-nuL+dNSVMcWB7OOtgb0EGH5AjO4UBCt68SLP08rwmC+iRhyuJWS9MtZ/MpipxFwKAlHFftbMsydXqWre8B0+XA==", + "dev": true, + "dependencies": { + "@jest/test-result": "^28.1.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.2.tgz", + "integrity": "sha512-3o+lKF6iweLeJFHBlMJysdaPbpoMmtbHEFsjzSv37HIq/wWt5ijTeO2Yf7MO5yyczCopD507cNwNLeX8Y/CuIg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.1", + "@jridgewell/trace-mapping": "^0.3.13", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.1", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/transform/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/transform/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/transform/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/transform/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/transform/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/transform/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/types": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "@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": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.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.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", + "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "peer": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@mdx-js/loader": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-2.1.2.tgz", + "integrity": "sha512-P7CWhrqE5rZ3ewBngZ9t/zQPbSq42iuty78K3zJ8Bl518qnOX1d106c+n7I/zHODPAmw9JfYMQdbv9WrrHa0DA==", + "peer": true, + "dependencies": { + "@mdx-js/mdx": "^2.0.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "webpack": ">=4" + } + }, + "node_modules/@mdx-js/loader/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@mdx-js/mdx": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-2.1.2.tgz", + "integrity": "sha512-ASN1GUH0gXsgJ2UD/Td7FzJo1SwFkkQ5V1i9at5o/ROra7brkyMcBsotsOWJWRzmXZaLw2uXWn4aN8B3PMNFMA==", + "dependencies": { + "@types/estree-jsx": "^0.0.1", + "@types/mdx": "^2.0.0", + "astring": "^1.6.0", + "estree-util-build-jsx": "^2.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "estree-walker": "^3.0.0", + "hast-util-to-estree": "^2.0.0", + "markdown-extensions": "^1.0.0", + "periscopic": "^3.0.0", + "remark-mdx": "^2.0.0", + "remark-parse": "^10.0.0", + "remark-rehype": "^10.0.0", + "unified": "^10.0.0", + "unist-util-position-from-estree": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "unist-util-visit": "^4.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/@mdx-js/mdx/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@mdx-js/mdx/node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/@mdx-js/mdx/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/unist-util-visit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", + "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/unist-util-visit-parents": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", + "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/react": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-2.1.2.tgz", + "integrity": "sha512-52e3DTJBrjsw3U51ZCdZ3N1IBaqnbzLIngCSXpKtiYiGr7PIqp3/P/+kym0MPTwBL/y9ZBmCieD8FyrXuEDrRw==", + "dependencies": { + "@types/mdx": "^2.0.0", + "@types/react": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "react": ">=16" + } + }, + "node_modules/@next/env": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/env/-/env-12.2.0.tgz", + "integrity": "sha512-/FCkDpL/8SodJEXvx/DYNlOD5ijTtkozf4PPulYPtkPOJaMPpBSOkzmsta4fnrnbdH6eZjbwbiXFdr6gSQCV4w==" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.2.0.tgz", + "integrity": "sha512-nIj5xV/z3dOfeBnE7qFAjUQZAi4pTlIMuusRM6s/T6lOz8x7mjY5s1ZkTUBmcjPVCb2VIv3CrMH0WZL6xfjZZg==", + "dev": true, + "dependencies": { + "glob": "7.1.7" + } + }, + "node_modules/@next/mdx": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/mdx/-/mdx-12.2.0.tgz", + "integrity": "sha512-obWsgfD0/1+OOr4PMQlSal34uhIDxkFe9Db+LaFfRDbsmD8+gb0YevUOV5KBoleEHXfDku0WAPUUmPmDiAxu1w==", + "peerDependencies": { + "@mdx-js/loader": ">=0.15.0", + "@mdx-js/react": "*" + } + }, + "node_modules/@next/swc-android-arm-eabi": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.0.tgz", + "integrity": "sha512-hbneH8DNRB2x0Nf5fPCYoL8a0osvdTCe4pvOc9Rv5CpDsoOlf8BWBs2OWpeP0U2BktGvIsuUhmISmdYYGyrvTw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-android-arm64": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.2.0.tgz", + "integrity": "sha512-1eEk91JHjczcJomxJ8X0XaUeNcp5Lx1U2Ic7j15ouJ83oRX+3GIslOuabW2oPkSgXbHkThMClhirKpvG98kwZg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.0.tgz", + "integrity": "sha512-x5U5gJd7ZvrEtTFnBld9O2bUlX8opu7mIQUqRzj7KeWzBwPhrIzTTsQXAiNqsaMuaRPvyHBVW/5d/6g6+89Y8g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.0.tgz", + "integrity": "sha512-iwMNFsrAPjfedjKDv9AXPAV16PWIomP3qw/FfPaxkDVRbUls7BNdofBLzkQmqxqWh93WrawLwaqyXpJuAaiwJA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-freebsd-x64": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.0.tgz", + "integrity": "sha512-gRiAw8g3Akf6niTDLEm1Emfa7jXDjvaAj/crDO8hKASKA4Y1fS4kbi/tyWw5VtoFI4mUzRmCPmZ8eL0tBSG58A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm-gnueabihf": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.0.tgz", + "integrity": "sha512-/TJZkxaIpeEwnXh6A40trgwd40C5+LJroLUOEQwMOJdavLl62PjCA6dGl1pgooWLCIb5YdBQ0EG4ylzvLwS2+Q==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.0.tgz", + "integrity": "sha512-++WAB4ElXCSOKG9H8r4ENF8EaV+w0QkrpjehmryFkQXmt5juVXz+nKDVlCRMwJU7A1O0Mie82XyEoOrf6Np1pA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.0.tgz", + "integrity": "sha512-XrqkHi/VglEn5zs2CYK6ofJGQySrd+Lr4YdmfJ7IhsCnMKkQY1ma9Hv5THwhZVof3e+6oFHrQ9bWrw9K4WTjFA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.0.tgz", + "integrity": "sha512-MyhHbAKVjpn065WzRbqpLu2krj4kHLi6RITQdD1ee+uxq9r2yg5Qe02l24NxKW+1/lkmpusl4Y5Lks7rBiJn4w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.0.tgz", + "integrity": "sha512-Tz1tJZ5egE0S/UqCd5V6ZPJsdSzv/8aa7FkwFmIJ9neLS8/00za+OY5pq470iZQbPrkTwpKzmfTTIPRVD5iqDg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.0.tgz", + "integrity": "sha512-0iRO/CPMCdCYUzuH6wXLnsfJX1ykBX4emOOvH0qIgtiZM0nVYbF8lkEyY2ph4XcsurpinS+ziWuYCXVqrOSqiw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.0.tgz", + "integrity": "sha512-8A26RJVcJHwIKm8xo/qk2ePRquJ6WCI2keV2qOW/Qm+ZXrPXHMIWPYABae/nKN243YFBNyPiHytjX37VrcpUhg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.0.tgz", + "integrity": "sha512-OI14ozFLThEV3ey6jE47zrzSTV/6eIMsvbwozo+XfdWqOPwQ7X00YkRx4GVMKMC0rM44oGS2gmwMKYpe4EblnA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@reduxjs/toolkit": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.8.3.tgz", + "integrity": "sha512-lU/LDIfORmjBbyDLaqFN2JB9YmAT1BElET9y0ZszwhSBa5Ef3t6o5CrHupw5J1iOXwd+o92QfQZ8OJpwXvsssg==", + "dependencies": { + "immer": "^9.0.7", + "redux": "^4.1.2", + "redux-thunk": "^2.4.1", + "reselect": "^4.1.5" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18", + "react-redux": "^7.2.1 || ^8.0.2" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz", + "integrity": "sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA==", + "dev": true + }, + "node_modules/@sinclair/typebox": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz", + "integrity": "sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@swc/helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.2.tgz", + "integrity": "sha512-556Az0VX7WR6UdoTn4htt/l3zPQ7bsQWK+HqdG4swV7beUCxo/BqmvbOpUkTIm/9ih86LIf1qsUnywNL3obGHw==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.2.tgz", + "integrity": "sha512-coq8DBABRPFcVhVIk6IbKyyHUt7YTEC/C992tatFB+yEx5WGBQrCgsSFjxHUr8AWXphWckadVJbominEduYBqw==", + "dependencies": { + "lodash.castarray": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || insiders" + } + }, + "node_modules/@testing-library/dom": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.14.0.tgz", + "integrity": "sha512-m8FOdUo77iMTwVRCyzWcqxlEIk+GnopbrRI15a0EaLbpZSCinIVI4kSQzWhkShK83GogvEFJSsHF3Ws0z1vrqA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^4.2.0", + "aria-query": "^5.0.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.4.4", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "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": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", + "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "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": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "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": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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/@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, + "engines": { + "node": ">=8" + } + }, + "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": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.3.0.tgz", + "integrity": "sha512-DB79aA426+deFgGSjnf5grczDPiL4taK3hFaa+M5q7q20Kcve9eQottOG5kZ74KEr55v0tU2CQormSSDK87zYQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.5.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@types/acorn": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", + "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", + "dev": true + }, + "node_modules/@types/babel__core": { + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", + "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", + "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", + "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.52", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.52.tgz", + "integrity": "sha512-BZWrtCU0bMVAIliIV+HJO1f1PR41M7NKjfxrFJwwhKI1KwhwOxYw1SXg9ao+CIMt774nFuGiG6eU+udtbEI9oQ==" + }, + "node_modules/@types/estree-jsx": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-0.0.1.tgz", + "integrity": "sha512-gcLAYiMfQklDCPjQegGn0TBAn9it05ISEsEhlKQUddIk7o2XDokOcTN7HBO8tznM0D9dGezvHEfRZBfZf6me0A==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/hast": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", + "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "28.1.4", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.4.tgz", + "integrity": "sha512-telv6G5N7zRJiLcI3Rs3o+ipZ28EnE+7EvF0pSrt2pZOMnAVI/f+6/LucDxOvcBcTeTL3JMF744BbVQAVBUQRA==", + "dev": true, + "dependencies": { + "jest-matcher-utils": "^28.0.0", + "pretty-format": "^28.0.0" + } + }, + "node_modules/@types/jest/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/jest/node_modules/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@types/jest/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/@types/js-yaml": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", + "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==" + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/mdast": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", + "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + }, + "node_modules/@types/mdx": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.2.tgz", + "integrity": "sha512-mJGfgj4aWpiKb8C0nnJJchs1sHBHn0HugkVfqqyQi7Wn6mBRksLeQsPOFvih/Pu8L1vlDzfe/LidhVHBeUk3aQ==" + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + }, + "node_modules/@types/mysql": { + "version": "2.0.0", + "resolved": "git+ssh://git@github.com/types/mysql.git#c26b1bc2bac17010081455e3127a90fb2eafcec9", + "dev": true, + "license": "ISC" + }, + "node_modules/@types/mysql2": { + "version": "1.0.0", + "resolved": "git+ssh://git@github.com/types/mysql2.git#89378b2cb3974ea8cdd1d633b8f056e54e5d2384", + "dev": true, + "license": "ISC", + "dependencies": { + "@types/mysql": "types/mysql" + } + }, + "node_modules/@types/node": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", + "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" + }, + "node_modules/@types/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" + }, + "node_modules/@types/prettier": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", + "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "node_modules/@types/react": { + "version": "18.0.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.14.tgz", + "integrity": "sha512-x4gGuASSiWmo0xjDLpm5mPb52syZHJx02VKbqUKdLmKtAwIh63XClGsiTI1K6DO5q7ox4xAsQrU+Gl3+gGXF9Q==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.0.5", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.5.tgz", + "integrity": "sha512-OWPWTUrY/NIrjsAPkAk1wW9LZeIjSvkXRhclsFO8CZcZGCOg2G0YZy4ft+rOyYxy8B7ui5iZzi9OkDebZ7/QSA==", + "devOptional": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + }, + "node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.3.tgz", + "integrity": "sha512-QEgE1uahnDbWEkZlidq7uKB630ny1NN8KbLPmznX+8hYsYpoV1/quG1Nzvs141FVuumuS7O0EpqYw3RB4AVzRg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.30.3", + "@typescript-eslint/type-utils": "5.30.3", + "@typescript-eslint/utils": "5.30.3", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.3.tgz", + "integrity": "sha512-ddwGEPC3E49DduAUC8UThQafHRE5uc1NE8jdOgl+w8/NrYF50MJQNeD3u4JZrqAXdY9rJz0CdQ9HpNME20CzkA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.30.3", + "@typescript-eslint/types": "5.30.3", + "@typescript-eslint/typescript-estree": "5.30.3", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.3.tgz", + "integrity": "sha512-yVJIIUXeo/vv6Alj6lKBvsqnRs5hcxUpN3Dg3aD9Zv6r7p6Nn106jJcr5rnpRHAReEb/aMI2RWrt3JmL17eCVA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.30.3", + "@typescript-eslint/visitor-keys": "5.30.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.3.tgz", + "integrity": "sha512-IIzakE7OXOqdwPaXhRiPnaZ8OuJJYBLufOffd9fqzkI4IMFIYq8KC7bghdnF7QUJTirURRErQFrJ/w5UpwIqaw==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "5.30.3", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.3.tgz", + "integrity": "sha512-vshU3pjSTgBPNgfd55JLYngHkXuwQP68fxYFUAg1Uq+JrR3xG/XjvL9Dmv28CpOERtqwkaR4QQ3mD0NLZcE2Xw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.3.tgz", + "integrity": "sha512-jqVh5N9AJx6+7yRgoA+ZelAFrHezgI9pzI9giv7s84DDOmtpFwTgURcpICDHyz9x6vAeOu91iACZ4dBTVfzIyA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.30.3", + "@typescript-eslint/visitor-keys": "5.30.3", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.3.tgz", + "integrity": "sha512-OEaBXGxxdIy35H+jyXfYAMQ66KMJczK9hEhL3gR6IRbWe5PyK+bPDC9zbQNVII6rNFTfF/Mse0z21NlEU+vOMw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.30.3", + "@typescript-eslint/types": "5.30.3", + "@typescript-eslint/typescript-estree": "5.30.3", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.3.tgz", + "integrity": "sha512-ep2xtHOhnSRt6fDP9DSSxrA/FqZhdMF7/Y9fYsxrKss2uWJMbzJyBJ/We1fKc786BJ10pHwrzUlhvpz8i7XzBg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.30.3", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "peer": true + }, + "node_modules/acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "peer": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "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==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-node/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/array-includes": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", + "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", + "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/astring": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.3.tgz", + "integrity": "sha512-sRpyiNrx2dEYIMmUXprS8nlpRg2Drs8m9ElX9vVEXaCB4XEAJhKfs7IcX0IwShjuOAjLR6wzIrgoptz1n19i1A==", + "bin": { + "astring": "bin/astring" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/autoprefixer": { + "version": "10.4.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", + "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.20.3", + "caniuse-lite": "^1.0.30001335", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axe-core": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.2.tgz", + "integrity": "sha512-LVAaGp/wkkgYJcjmHsoKx4juT1aQvJyPcW09MLCjVTh3V2cc6PnyempiLMNH5iMdfIX/zdbjUx2KDjMLCTdPeA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "node_modules/babel-jest": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.2.tgz", + "integrity": "sha512-pfmoo6sh4L/+5/G2OOfQrGJgvH7fTa1oChnuYH2G/6gA+JwDvO8PELwvwnofKBMNrQsam0Wy/Rw+QSrBNewq2Q==", + "dev": true, + "dependencies": { + "@jest/transform": "^28.1.2", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^28.1.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/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/babel-jest/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/babel-jest/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/babel-jest/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/babel-jest/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/babel-jest/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/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.1.tgz", + "integrity": "sha512-NovGCy5Hn25uMJSAU8FaHqzs13cFoOI4lhIujiepssjCKRsAo3TA734RDWSGxuFTsUJXerYOqQQodlxgmtqbzw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.1.tgz", + "integrity": "sha512-FCq9Oud0ReTeWtcneYf/48981aTfXYuB9gbU4rBNNJVBSQ6ssv7E6v/qvbBxtOWwZFXjLZwpg+W3q7J6vhH25g==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^28.1.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", + "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001359", + "electron-to-chromium": "^1.4.172", + "node-releases": "^2.0.5", + "update-browserslist-db": "^1.0.4" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001361", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001361.tgz", + "integrity": "sha512-ybhCrjNtkFji1/Wto6SSJKkWk6kZgVQsDq5QI83SafsF6FXv2JB4df9eEdH6g8sdGgqTXrFLjAxqBGgYoU3azQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clipboard": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", + "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", + "optional": true, + "dependencies": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "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==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz", + "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.3.0.tgz", + "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==", + "dev": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/core-js-pure": { + "version": "3.23.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.3.tgz", + "integrity": "sha512-XpoouuqIj4P+GWtdyV8ZO3/u4KftkeDVMfvp+308eGMhCrA3lVDSmAxO0c6GGOcmgVlaKDrgWVMo49h2ab/TDA==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", + "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/date-fns": { + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz", + "integrity": "sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==", + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "optional": true + }, + "node_modules/denque": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", + "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dequal": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz", + "integrity": "sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dependencies": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.14", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz", + "integrity": "sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==", + "dev": true + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.177", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.177.tgz", + "integrity": "sha512-FYPir3NSBEGexSZUEeht81oVhHfLFl6mhUKSkjHN/iB/TwEIt/WHQrqVGfTLN5gQxwJCQkIJBe05eOXjI7omgg==" + }, + "node_modules/emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "peer": true + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz", + "integrity": "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-next": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.2.0.tgz", + "integrity": "sha512-QWzNegadFXjQ0h3hixnLacRM9Kot85vQefyNsA8IeOnERZMz0Gvays1W6DMCjSxJbnCwuWaMXj9DCpar5IahRA==", + "dev": true, + "dependencies": { + "@next/eslint-plugin-next": "12.2.0", + "@rushstack/eslint-patch": "^1.1.3", + "@typescript-eslint/parser": "^5.21.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^2.7.1", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.29.4", + "eslint-plugin-react-hooks": "^4.5.0" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", + "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "glob": "^7.2.0", + "is-glob": "^4.0.3", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-import-resolver-typescript/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.0.tgz", + "integrity": "sha512-kTeLuIzpNhXL2CwLlc8AHI0aFRwWHcg483yepO9VQiHzM9bZwJdzTkzBszbuPrbgGmq2rlX/FaT2fJQsjUSHsw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.18.3", + "aria-query": "^4.2.2", + "array-includes": "^3.1.5", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.4.2", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.1", + "language-tags": "^1.0.5", + "minimatch": "^3.1.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.30.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz", + "integrity": "sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.5", + "array.prototype.flatmap": "^1.3.0", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.1", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/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/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/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/eslint/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/eslint/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/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/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/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "dev": true, + "dependencies": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-util-attach-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-2.0.1.tgz", + "integrity": "sha512-1wTBNndwMIsnvnuxjFIaYQz0M7PsCvcgP0YD7/dU8xWh1FuHk+O6pYpT4sLa5THY/CywJvdIdgw4uhozujga/g==", + "dependencies": { + "@types/estree": "^0.0.51" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-attach-comments/node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "node_modules/estree-util-build-jsx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-2.1.0.tgz", + "integrity": "sha512-gsBGfsY6LOJUIDwmMkTOcgCX+3r/LUjRBccgHMSW55PHjhZsV13RmPl/iwpAvW8KcQqoN9P0FEFWTSS2Zc5bGA==", + "dependencies": { + "@types/estree-jsx": "^0.0.1", + "estree-util-is-identifier-name": "^2.0.0", + "estree-walker": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.0.1.tgz", + "integrity": "sha512-rxZj1GkQhY4x1j/CSnybK9cGuMFQYFPLq0iNyopqf14aOVLFtMv7Esika+ObJWPWiOHuMOAHz3YkWoLYYRnzWQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-visit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-1.1.0.tgz", + "integrity": "sha512-3lXJ4Us9j8TUif9cWcQy81t9p5OLasnDuuhrFiqb+XstmKC1d1LmrQWYsY49/9URcfHE64mPypDBaNK9NwWDPQ==", + "dependencies": { + "@types/estree-jsx": "^0.0.1", + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.1.tgz", + "integrity": "sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.1.tgz", + "integrity": "sha512-/AANEwGL0tWBwzLNOvO0yUdy2D52jVdNXppOqswC49sxMN2cPWsGCQdzuIf9tj6hHoBQzNvx75JUYuQAckPo3w==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^28.1.1", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-util": "^28.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.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==" + }, + "node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "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==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "dependencies": { + "is-property": "^1.0.2" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/github-slugger": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", + "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==" + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "peer": true + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", + "optional": true, + "dependencies": { + "delegate": "^3.1.2" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", + "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", + "dependencies": { + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5/node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-util-from-parse5/node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5/node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5/node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-has-property": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-2.0.0.tgz", + "integrity": "sha512-4Qf++8o5v14us4Muv3HRj+Er6wTNGA/N9uCaZMty4JWvyFKLdhULrv4KE1b65AthsSO9TXSZnjuxS8ecIyhb0w==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-heading-rank": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-2.1.0.tgz", + "integrity": "sha512-w+Rw20Q/iWp2Bcnr6uTrYU6/ftZLbHKhvc8nM26VIWpDqDMlku2iXUVTeOlsdoih/UKQhY7PHQ+vZ0Aqq8bxtQ==", + "dependencies": { + "@types/hast": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.2.tgz", + "integrity": "sha512-thjnlGAnwP8ef/GSO1Q8BfVk2gundnc2peGQqEg2kUt/IqesiGg/5mSwN2fE7nLzy61pg88NG6xV+UrGOrx9EA==", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-estree": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-2.0.2.tgz", + "integrity": "sha512-UQrZVeBj6A9od0lpFvqHKNSH9zvDrNoyWKbveu1a2oSCXEDUI+3bnd6BoiQLPnLrcXXn/jzJ6y9hmJTTlvf8lQ==", + "dependencies": { + "@types/estree-jsx": "^0.0.1", + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "estree-util-attach-comments": "^2.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "hast-util-whitespace": "^2.0.0", + "mdast-util-mdx-expression": "^1.0.0", + "mdast-util-mdxjs-esm": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^0.3.0", + "unist-util-position": "^4.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.3.tgz", + "integrity": "sha512-/D/E5ymdPYhHpPkuTHOUkSatxr4w1ZKrZsG0Zv/3C2SRVT0JFJG53VS45AMrBtYk0wp5A7ksEhiC8QaOZM95+A==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-is-element": "^2.0.0", + "hast-util-whitespace": "^2.0.0", + "html-void-elements": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.2", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-string": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-1.0.4.tgz", + "integrity": "sha512-eK0MxRX47AV2eZ+Lyr18DCpQgodvaS3fAQO2+b9Two9F5HEoRPhiUMNzoXArMJfZi2yieFzUBMRl3HNJ3Jus3w==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz", + "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript/node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hastscript/node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hastscript/node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/html-void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz", + "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/husky": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", + "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "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==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", + "dev": true, + "dependencies": { + "harmony-reflect": "^1.4.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "9.0.15", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz", + "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "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", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "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-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==" + }, + "node_modules/is-reference": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.0.tgz", + "integrity": "sha512-Eo1W3wUoHWoCoVM4GVl/a+K0IgiqE5aIo4kJABFyMum1ZORlPkC+UC357sSQUL5w5QCE5kCC9upl75b7+7CY/Q==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "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-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "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", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", + "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/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/istanbul-lib-report/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/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.2.tgz", + "integrity": "sha512-Tuf05DwLeCh2cfWCQbcz9UxldoDyiR1E9Igaei5khjonKncYdc6LDfynKCEWozK0oLE3GD+xKAo2u8x/0s6GOg==", + "dev": true, + "dependencies": { + "@jest/core": "^28.1.2", + "@jest/types": "^28.1.1", + "import-local": "^3.0.2", + "jest-cli": "^28.1.2" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.0.2.tgz", + "integrity": "sha512-QX9u+5I2s54ZnGoMEjiM2WeBvJR2J7w/8ZUmH2um/WLAuGAYFQcsVXY9+1YL6k0H/AGUdH8pXUAv6erDqEsvIA==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.2.tgz", + "integrity": "sha512-E2vdPIJG5/69EMpslFhaA46WkcrN74LI5V/cSJ59L7uS8UNoXbzTxmwhpi9XrIL3zqvMt5T0pl5k2l2u2GwBNQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.2", + "@jest/expect": "^28.1.2", + "@jest/test-result": "^28.1.1", + "@jest/types": "^28.1.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^28.1.1", + "jest-matcher-utils": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-runtime": "^28.1.2", + "jest-snapshot": "^28.1.2", + "jest-util": "^28.1.1", + "pretty-format": "^28.1.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/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-circus/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-circus/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-circus/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-circus/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-circus/node_modules/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/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/jest-circus/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/jest-circus/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-cli": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.2.tgz", + "integrity": "sha512-l6eoi5Do/IJUXAFL9qRmDiFpBeEJAnjJb1dcd9i/VWfVWbp3mJhuH50dNtX67Ali4Ecvt4eBkWb4hXhPHkAZTw==", + "dev": true, + "dependencies": { + "@jest/core": "^28.1.2", + "@jest/test-result": "^28.1.1", + "@jest/types": "^28.1.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^28.1.2", + "jest-util": "^28.1.1", + "jest-validate": "^28.1.1", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/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-cli/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-cli/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-cli/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-cli/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-cli/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-config": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.2.tgz", + "integrity": "sha512-g6EfeRqddVbjPVBVY4JWpUY4IvQoFRIZcv4V36QkqzE0IGhEC/VkugFeBMAeUE7PRgC8KJF0yvJNDeQRbamEVA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^28.1.1", + "@jest/types": "^28.1.1", + "babel-jest": "^28.1.2", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^28.1.2", + "jest-environment-node": "^28.1.2", + "jest-get-type": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.1", + "jest-runner": "^28.1.2", + "jest-util": "^28.1.1", + "jest-validate": "^28.1.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^28.1.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/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-config/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-config/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-config/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-config/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-config/node_modules/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-config/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/jest-config/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/jest-config/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-diff": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.1.tgz", + "integrity": "sha512-/MUUxeR2fHbqHoMMiffe/Afm+U8U4olFRJ0hiVG2lZatPJcnGxx292ustVu7bULhjV65IYMxRdploAKLbcrsyg==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.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/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-diff/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/jest-diff/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/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-docblock": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", + "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.1.tgz", + "integrity": "sha512-A042rqh17ZvEhRceDMi784ppoXR7MWGDEKTXEZXb4svt0eShMZvijGxzKsx+yIjeE8QYmHPrnHiTSQVhN4nqaw==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.1", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "jest-util": "^28.1.1", + "pretty-format": "^28.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each/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-each/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-each/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-each/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-each/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-each/node_modules/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each/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/jest-each/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/jest-each/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-environment-node": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.2.tgz", + "integrity": "sha512-oYsZz9Qw27XKmOgTtnl0jW7VplJkN2oeof+SwAwKFQacq3CLlG9u4kTGuuLWfvu3J7bVutWlrbEQMOCL/jughw==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.2", + "@jest/fake-timers": "^28.1.2", + "@jest/types": "^28.1.1", + "@types/node": "*", + "jest-mock": "^28.1.1", + "jest-util": "^28.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.1.tgz", + "integrity": "sha512-ZrRSE2o3Ezh7sb1KmeLEZRZ4mgufbrMwolcFHNRSjKZhpLa8TdooXOOFlSwoUzlbVs1t0l7upVRW2K7RWGHzbQ==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.1", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.1", + "jest-worker": "^28.1.1", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.1.tgz", + "integrity": "sha512-4jvs8V8kLbAaotE+wFR7vfUGf603cwYtFf1/PYEsyX2BAjSzj8hQSVTP6OWzseTl0xL6dyHuKs2JAks7Pfubmw==", + "dev": true, + "dependencies": { + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-leak-detector/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/jest-leak-detector/node_modules/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-leak-detector/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/jest-matcher-utils": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz", + "integrity": "sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.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/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-matcher-utils/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/jest-matcher-utils/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/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": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", + "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.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/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-message-util/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/jest-message-util/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/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-mock": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.1.tgz", + "integrity": "sha512-bDCb0FjfsmKweAvE09dZT59IMkzgN0fYBH6t5S45NoJfd2DHkS3ySG2K+hucortryhO3fVuXdlxWcbtIuV/Skw==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.1", + "@types/node": "*" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.1.tgz", + "integrity": "sha512-/d1UbyUkf9nvsgdBildLe6LAD4DalgkgZcKd0nZ8XUGPyA/7fsnaQIlKVnDiuUXv/IeZhPEDrRJubVSulxrShA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^28.1.1", + "jest-validate": "^28.1.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.2.tgz", + "integrity": "sha512-OXw4vbOZuyRTBi3tapWBqdyodU+T33ww5cPZORuTWkg+Y8lmsxQlVu3MWtJh6NMlKRTHQetF96yGPv01Ye7Mbg==", + "dev": true, + "dependencies": { + "jest-regex-util": "^28.0.2", + "jest-snapshot": "^28.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-resolve/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-resolve/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-resolve/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-resolve/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-resolve/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-resolve/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-runner": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.2.tgz", + "integrity": "sha512-6/k3DlAsAEr5VcptCMdhtRhOoYClZQmxnVMZvZ/quvPGRpN7OBQYPIC32tWSgOnbgqLXNs5RAniC+nkdFZpD4A==", + "dev": true, + "dependencies": { + "@jest/console": "^28.1.1", + "@jest/environment": "^28.1.2", + "@jest/test-result": "^28.1.1", + "@jest/transform": "^28.1.2", + "@jest/types": "^28.1.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "graceful-fs": "^4.2.9", + "jest-docblock": "^28.1.1", + "jest-environment-node": "^28.1.2", + "jest-haste-map": "^28.1.1", + "jest-leak-detector": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-resolve": "^28.1.1", + "jest-runtime": "^28.1.2", + "jest-util": "^28.1.1", + "jest-watcher": "^28.1.1", + "jest-worker": "^28.1.1", + "source-map-support": "0.5.13", + "throat": "^6.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/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-runner/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-runner/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-runner/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-runner/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-runner/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-runtime": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.2.tgz", + "integrity": "sha512-i4w93OsWzLOeMXSi9epmakb2+3z0AchZtUQVF1hesBmcQQy4vtaql5YdVe9KexdJaVRyPDw8DoBR0j3lYsZVYw==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.2", + "@jest/fake-timers": "^28.1.2", + "@jest/globals": "^28.1.2", + "@jest/source-map": "^28.1.2", + "@jest/test-result": "^28.1.1", + "@jest/transform": "^28.1.2", + "@jest/types": "^28.1.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-mock": "^28.1.1", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.1", + "jest-snapshot": "^28.1.2", + "jest-util": "^28.1.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runtime/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-runtime/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-runtime/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-runtime/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-runtime/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-runtime/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-snapshot": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.2.tgz", + "integrity": "sha512-wzrieFttZYfLvrCVRJxX+jwML2YTArOUqFpCoSVy1QUapx+LlV9uLbV/mMEhYj4t7aMeE9aSQFHSvV/oNoDAMA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^28.1.1", + "@jest/transform": "^28.1.2", + "@jest/types": "^28.1.1", + "@types/babel__traverse": "^7.0.6", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^28.1.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^28.1.1", + "jest-get-type": "^28.0.2", + "jest-haste-map": "^28.1.1", + "jest-matcher-utils": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-util": "^28.1.1", + "natural-compare": "^1.4.0", + "pretty-format": "^28.1.1", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/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-snapshot/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-snapshot/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-snapshot/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-snapshot/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-snapshot/node_modules/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/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/jest-snapshot/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/jest-snapshot/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/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": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.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/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": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.1.tgz", + "integrity": "sha512-Kpf6gcClqFCIZ4ti5++XemYJWUPCFUW+N2gknn+KgnDf549iLul3cBuKVe1YcWRlaF8tZV8eJCap0eECOEE3Ug==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "leven": "^3.1.0", + "pretty-format": "^28.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-validate/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-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/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-validate/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-validate/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-validate/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-validate/node_modules/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-validate/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/jest-validate/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/jest-validate/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-watch-typeahead": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", + "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^28.0.0", + "jest-watcher": "^28.0.0", + "slash": "^4.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "jest": "^27.0.0 || ^28.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/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-watch-typeahead/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-watch-typeahead/node_modules/char-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", + "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", + "dev": true, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/jest-watch-typeahead/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-watch-typeahead/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-watch-typeahead/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-watch-typeahead/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "dev": true, + "dependencies": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/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-watcher": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.1.tgz", + "integrity": "sha512-RQIpeZ8EIJMxbQrXpJQYIIlubBnB9imEHsxxE41f54ZwcqWLysL/A0ZcdMirf+XsMn3xfphVQVV4EW0/p7i7Ug==", + "dev": true, + "dependencies": { + "@jest/test-result": "^28.1.1", + "@jest/types": "^28.1.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watcher/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-watcher/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-watcher/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-watcher/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-watcher/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-watcher/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-worker": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.1.tgz", + "integrity": "sha512-Au7slXB08C6h+xbJPp7VIb6U0XX5Kc9uel/WFc6/rcTzGiaVCBRngBExSYuXSLFPULPSYU3cJ3ybS988lNFQhQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-worker/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-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.1.tgz", + "integrity": "sha512-pxrjmNpeRw5wwVeWyEAk7QJu2GnBO3uzPFmHCKJJFPKK2Cy0cWL23krGtLdnMmbIi6/FjlrQpPyfQI19ByPOhQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.5", + "object.assign": "^4.1.2" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", + "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dev": true, + "dependencies": { + "language-subtag-registry": "~0.3.2" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", + "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/lint-staged": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.0.3.tgz", + "integrity": "sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==", + "dev": true, + "dependencies": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.17", + "commander": "^9.3.0", + "debug": "^4.3.4", + "execa": "^6.1.0", + "lilconfig": "2.0.5", + "listr2": "^4.0.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.2", + "pidtree": "^0.6.0", + "string-argv": "^0.3.1", + "yaml": "^2.1.1" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/execa": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "dev": true, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/lint-staged/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/lint-staged/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/lint-staged/node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "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/lint-staged/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/lint-staged/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/lint-staged/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/listr2": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", + "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.5", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/listr2/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/listr2/node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/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/listr2/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/listr2/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/listr2/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash.castarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/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/log-update/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/log-update/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/log-update/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "node_modules/longest-streak": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.1.tgz", + "integrity": "sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lz-string": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", + "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==", + "dev": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/markdown-extensions": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-1.1.1.tgz", + "integrity": "sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/markdown-table": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.2.tgz", + "integrity": "sha512-y8j3a5/DkJCmS5x4dMCQL+OR0+2EAq3DOtio1COSHsmW2BGXnNCK3v12hJt1LrUz5iZH5g0LmuYOjDdI+czghA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-definitions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.1.tgz", + "integrity": "sha512-rQ+Gv7mHttxHOBx2dkF4HWTg+EE+UR78ptQWDylzPKaQuVGdG4HIoY3SrS/pCp80nZ04greFvXbVFHT+uf0JVQ==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-definitions/node_modules/unist-util-visit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", + "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-definitions/node_modules/unist-util-visit-parents": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", + "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.0.tgz", + "integrity": "sha512-bz8hUWkMX7UcasORORcyBEsTKJ+dBiFwRPrm43hHC9NMRylIMLbfO5rwfeCN+UtY4AAi7s8WqXftb9eX6ZsqCg==", + "dependencies": { + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/unist-util-visit-parents": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", + "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", + "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.1.tgz", + "integrity": "sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==", + "dependencies": { + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-gfm-autolink-literal": "^1.0.0", + "mdast-util-gfm-footnote": "^1.0.0", + "mdast-util-gfm-strikethrough": "^1.0.0", + "mdast-util-gfm-table": "^1.0.0", + "mdast-util-gfm-task-list-item": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.2.tgz", + "integrity": "sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg==", + "dependencies": { + "@types/mdast": "^3.0.0", + "ccount": "^2.0.0", + "mdast-util-find-and-replace": "^2.0.0", + "micromark-util-character": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.1.tgz", + "integrity": "sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw==", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0", + "micromark-util-normalize-identifier": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.1.tgz", + "integrity": "sha512-zKJbEPe+JP6EUv0mZ0tQUyLQOC+FADt0bARldONot/nefuISkaZFlmVK4tU6JgfyZGrky02m/I6PmehgAgZgqg==", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.4.tgz", + "integrity": "sha512-aEuoPwZyP4iIMkf2cLWXxx3EQ6Bmh2yKy9MVCg4i6Sd3cX80dcLEfXO/V4ul3pGH9czBK4kp+FAl+ZHmSUt9/w==", + "dependencies": { + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.1.tgz", + "integrity": "sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA==", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-2.0.0.tgz", + "integrity": "sha512-M09lW0CcBT1VrJUaF/PYxemxxHa7SLDHdSn94Q9FhxjCQfuW7nMAWKWimTmA3OyDMSTH981NN1csW1X+HPSluw==", + "dependencies": { + "mdast-util-mdx-expression": "^1.0.0", + "mdast-util-mdx-jsx": "^2.0.0", + "mdast-util-mdxjs-esm": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.2.1.tgz", + "integrity": "sha512-BtQwyalaq6jRjx0pagtuAwGrmzL1yInrfA4EJv7GOoiPOUbR4gr6h65I+G3WTh1/Cag2Eda4ip400Ch6CFmWiA==", + "dependencies": { + "@types/estree-jsx": "^0.0.1", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.0.1.tgz", + "integrity": "sha512-oPC7/smPBf7vxnvIYH5y3fPo2lw1rdrswFfSb4i0GTAXRUQv7JUU/t/hbp07dgGdUFTSDOHm5DNamhNg/s2Hrg==", + "dependencies": { + "@types/estree-jsx": "^0.0.1", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "ccount": "^2.0.0", + "mdast-util-to-markdown": "^1.3.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-remove-position": "^4.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/parse-entities": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.0.tgz", + "integrity": "sha512-5nk9Fn03x3rEhGaX1FU6IDwG/k+GxLXlFAkgrbM1asuAFl3BhdQWvASaIsmwWypRNcZKHPYnIuOSfIWEyEQnPQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.2.0.tgz", + "integrity": "sha512-IPpX9GBzAIbIRCjbyeLDpMhACFb0wxTIujuR3YElB8LWbducUdMgRJuqs/Vg8xQ1bIAMm7lw8L+YNtua0xKXRw==", + "dependencies": { + "@types/estree-jsx": "^0.0.1", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.1.1.tgz", + "integrity": "sha512-qE09zD6ylVP14jV4mjLIhDBOrpFdShHZcEsYvvKGABlr9mGbV7mTlRWdoFxL/EYSTNDiC9GZXy7y8Shgb9Dtzw==", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "@types/mdurl": "^1.0.0", + "mdast-util-definitions": "^5.0.0", + "mdurl": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "unist-builder": "^3.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast/node_modules/unist-util-visit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", + "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast/node_modules/unist-util-visit-parents": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", + "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.3.0.tgz", + "integrity": "sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "longest-streak": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "micromark-util-decode-string": "^1.0.0", + "unist-util-visit": "^4.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown/node_modules/unist-util-visit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", + "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown/node_modules/unist-util-visit-parents": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", + "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, + "node_modules/mdx-prism": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/mdx-prism/-/mdx-prism-0.3.4.tgz", + "integrity": "sha512-Ijy/BB0NINK5Vn6WgOATgX75q6JEdWcGZuXtpePoGiILbjEWFiOkacTdGDpu+VGTrxu0nszlX2Spkf0bhC5O6A==", + "dependencies": { + "hast-util-to-string": "^1.0.0", + "parse-numeric-range": "^0.0.2", + "refractor": "3.3.0", + "rehype": "^11.0.0", + "rehype-parse": "^7.0.1", + "unified": "^9.2.1", + "unist-util-visit": "^1.1.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mdx-prism/node_modules/ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdx-prism/node_modules/character-entities-html4": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", + "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdx-prism/node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdx-prism/node_modules/hast-util-is-element": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz", + "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdx-prism/node_modules/hast-util-to-html": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-7.1.3.tgz", + "integrity": "sha512-yk2+1p3EJTEE9ZEUkgHsUSVhIpCsL/bvT8E5GzmWc+N1Po5gBw+0F8bo7dpxXR0nu0bQVxVZGX2lBGF21CmeDw==", + "dependencies": { + "ccount": "^1.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-is-element": "^1.0.0", + "hast-util-whitespace": "^1.0.0", + "html-void-elements": "^1.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0", + "stringify-entities": "^3.0.1", + "unist-util-is": "^4.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdx-prism/node_modules/hast-util-whitespace": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz", + "integrity": "sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdx-prism/node_modules/html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdx-prism/node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdx-prism/node_modules/rehype": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-11.0.0.tgz", + "integrity": "sha512-qXqRqiCFJD5CJ61CSJuNImTFrm3zVkOU9XywHDwrUuvWN74MWt72KJ67c5CM5x8g0vGcOkRVCrYj85vqkmHulQ==", + "dependencies": { + "rehype-parse": "^7.0.0", + "rehype-stringify": "^8.0.0", + "unified": "^9.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdx-prism/node_modules/rehype-stringify": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-8.0.0.tgz", + "integrity": "sha512-VkIs18G0pj2xklyllrPSvdShAV36Ff3yE5PUO9u36f6+2qJFnn22Z5gKwBOwgXviux4UC7K+/j13AnZfPICi/g==", + "dependencies": { + "hast-util-to-html": "^7.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdx-prism/node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdx-prism/node_modules/stringify-entities": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", + "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", + "dependencies": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdx-prism/node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.10.tgz", + "integrity": "sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz", + "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.1.tgz", + "integrity": "sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^1.0.0", + "micromark-extension-gfm-footnote": "^1.0.0", + "micromark-extension-gfm-strikethrough": "^1.0.0", + "micromark-extension-gfm-table": "^1.0.0", + "micromark-extension-gfm-tagfilter": "^1.0.0", + "micromark-extension-gfm-task-list-item": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.3.tgz", + "integrity": "sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.4.tgz", + "integrity": "sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==", + "dependencies": { + "micromark-core-commonmark": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.4.tgz", + "integrity": "sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==", + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.5.tgz", + "integrity": "sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==", + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.1.tgz", + "integrity": "sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==", + "dependencies": { + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.3.tgz", + "integrity": "sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==", + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.3.tgz", + "integrity": "sha512-TjYtjEMszWze51NJCZmhv7MEBcgYRgb3tJeMAJ+HQCAaZHHRBaDCccqQzGizR/H4ODefP44wRTgOn2vE5I6nZA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-extension-mdx-jsx": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.3.tgz", + "integrity": "sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==", + "dependencies": { + "@types/acorn": "^4.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-md": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.0.tgz", + "integrity": "sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==", + "dependencies": { + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.0.tgz", + "integrity": "sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==", + "dependencies": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^1.0.0", + "micromark-extension-mdx-jsx": "^1.0.0", + "micromark-extension-mdx-md": "^1.0.0", + "micromark-extension-mdxjs-esm": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.3.tgz", + "integrity": "sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==", + "dependencies": { + "micromark-core-commonmark": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.1.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", + "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz", + "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-factory-mdx-expression": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.6.tgz", + "integrity": "sha512-WRQIc78FV7KrCfjsEf/sETopbYjElh3xAmNpLkd1ODPqxEngP42eVRGbiPEQWpRV27LzqW+XVTvQAMIIRLPnNA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", + "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz", + "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz", + "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", + "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", + "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz", + "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz", + "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz", + "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz", + "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz", + "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-events-to-acorn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.1.0.tgz", + "integrity": "sha512-hB8HzidNt/Us5q2BvqXj8eeEm0U9rRfnZxcA9T65JRUMAY4MbfJRAFm7m9fXMAdSHJiVPmajsp8/rp6/FlHL8A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/acorn": "^4.0.0", + "@types/estree": "^0.0.51", + "estree-util-visit": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-location": "^4.0.0", + "vfile-message": "^3.0.0" + } + }, + "node_modules/micromark-util-events-to-acorn/node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "node_modules/micromark-util-events-to-acorn/node_modules/vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "dependencies": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-util-html-tag-name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz", + "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", + "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz", + "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz", + "integrity": "sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz", + "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz", + "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz", + "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "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==", + "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==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/mysql2": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz", + "integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==", + "dependencies": { + "denque": "^2.0.1", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^4.0.0", + "lru-cache": "^6.0.0", + "named-placeholders": "^1.1.2", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/named-placeholders": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", + "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", + "dependencies": { + "lru-cache": "^4.1.3" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/named-placeholders/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/named-placeholders/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "peer": true + }, + "node_modules/next": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/next/-/next-12.2.0.tgz", + "integrity": "sha512-B4j7D3SHYopLYx6/Ark0fenwIar9tEaZZFAaxmKjgcMMexhVJzB3jt7X+6wcdXPPMeUD6r09weUtnDpjox/vIA==", + "dependencies": { + "@next/env": "12.2.0", + "@swc/helpers": "0.4.2", + "caniuse-lite": "^1.0.30001332", + "postcss": "8.4.5", + "styled-jsx": "5.0.2", + "use-sync-external-store": "1.1.0" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=12.22.0" + }, + "optionalDependencies": { + "@next/swc-android-arm-eabi": "12.2.0", + "@next/swc-android-arm64": "12.2.0", + "@next/swc-darwin-arm64": "12.2.0", + "@next/swc-darwin-x64": "12.2.0", + "@next/swc-freebsd-x64": "12.2.0", + "@next/swc-linux-arm-gnueabihf": "12.2.0", + "@next/swc-linux-arm64-gnu": "12.2.0", + "@next/swc-linux-arm64-musl": "12.2.0", + "@next/swc-linux-x64-gnu": "12.2.0", + "@next/swc-linux-x64-musl": "12.2.0", + "@next/swc-win32-arm64-msvc": "12.2.0", + "@next/swc-win32-ia32-msvc": "12.2.0", + "@next/swc-win32-x64-msvc": "12.2.0" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^6.0.0 || ^7.0.0", + "react": "^17.0.2 || ^18.0.0-0", + "react-dom": "^17.0.2 || ^18.0.0-0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next-mdx-remote": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/next-mdx-remote/-/next-mdx-remote-4.0.3.tgz", + "integrity": "sha512-jKpZyBN0cOUmfBRId5iGpplWOO79hV2A5qfo17VG4Avn0G5PEs6vR9vf9IngKEw1G4aVqzhCs3j9CEbMFzZoAg==", + "dependencies": { + "@mdx-js/mdx": "^2.0.0", + "@mdx-js/react": "^2.0.0", + "vfile": "^5.3.0", + "vfile-matter": "^3.0.1" + }, + "engines": { + "node": ">=14", + "npm": ">=7" + }, + "peerDependencies": { + "react": ">=16.x <=18.x", + "react-dom": ">=16.x <=18.x" + } + }, + "node_modules/next-themes": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.2.0.tgz", + "integrity": "sha512-myhpDL4vadBD9YDSHiewqvzorGzB03N84e+3LxCwHRlM/hiBOaW+UsKsQojQAzC7fdcJA0l2ppveXcYaVV+hxQ==", + "peerDependencies": { + "next": "*", + "react": "*", + "react-dom": "*" + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", + "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", + "dependencies": { + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true, + "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", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", + "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-numeric-range": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-0.0.2.tgz", + "integrity": "sha512-m6xRZuda9v6EGdnPMIkcyB3/NpdgbMJG8yPAQ0Mwm1nGlm2OE/o6YS0EAxAqv6u4/PKQPp6BNoylZnRb2U2/OA==" + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/periscopic": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.0.4.tgz", + "integrity": "sha512-SFx68DxCv0Iyo6APZuw/AKewkkThGwssmU0QWtTlvov3VAtPX+QJ4CadwSaz8nrT5jPIuxdvJWB4PnD2KNDxQg==", + "dependencies": { + "estree-walker": "^3.0.0", + "is-reference": "^3.0.0" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-nested": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "dependencies": { + "postcss-selector-parser": "^6.0.6" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "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": { + "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/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/prismjs": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.23.0.tgz", + "integrity": "sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA==", + "optionalDependencies": { + "clipboard": "^2.0.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/property-information": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.1.1.tgz", + "integrity": "sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-confirm-alert": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/react-confirm-alert/-/react-confirm-alert-3.0.2.tgz", + "integrity": "sha512-4yjYlhURDc1P6c/9A20C0w4EHx9kik9kHjjgmuIGD0F5sSQcmSstU1qwPrkFL3gJaMKWunckEtTw/7cARW3ZFg==", + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=10.0.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-hook-form": { + "version": "7.33.1", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.33.1.tgz", + "integrity": "sha512-ydTfTxEJdvgjCZBj5DDXRc58oTEfnFupEwwTAQ9FSKzykEJkX+3CiAkGtAMiZG7IPWHuzgT6AOBfogiKhUvKgg==", + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18" + } + }, + "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/react-redux": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.2.tgz", + "integrity": "sha512-nBwiscMw3NoP59NFCXFf02f8xdo+vSHT/uZ1ldDwF7XaTpzm+Phk97VT4urYBl5TYAPNVaFm12UHAEyzkpNzRA==", + "dependencies": { + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" + }, + "peerDependencies": { + "@types/react": "^16.8 || ^17.0 || ^18.0", + "@types/react-dom": "^16.8 || ^17.0 || ^18.0", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0", + "react-native": ">=0.59", + "redux": "^4" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/react-redux/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==" + }, + "node_modules/react-toastify": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-9.0.5.tgz", + "integrity": "sha512-dszPCeQINY+Nm6HmsiAXT/7wsazPqv0S/RuhIYLAW+fTKcd3T1iRjZG0XqrN9nvAzqaE5J6uxMaiBrOevxjY8g==", + "dependencies": { + "clsx": "^1.1.1" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/redux": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", + "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, + "node_modules/redux-thunk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz", + "integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==", + "peerDependencies": { + "redux": "^4" + } + }, + "node_modules/refractor": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.3.0.tgz", + "integrity": "sha512-c/jEhQjk1NDyTF3hMgtu8PigaqkWUv+c5+mBffZCTnjyrNSJkG+0eoTOJV/u0XCTuPfaFzJyj6MM4HnF0Wr27Q==", + "dependencies": { + "hastscript": "^6.0.0", + "parse-entities": "^2.0.0", + "prismjs": "~1.23.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/rehype": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-12.0.1.tgz", + "integrity": "sha512-ey6kAqwLM3X6QnMDILJthGvG1m1ULROS9NT4uG9IDCuv08SFyLlreSuvOa//DgEvbXx62DS6elGVqusWhRUbgw==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "rehype-parse": "^8.0.0", + "rehype-stringify": "^9.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-autolink-headings": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/rehype-autolink-headings/-/rehype-autolink-headings-6.1.1.tgz", + "integrity": "sha512-NMYzZIsHM3sA14nC5rAFuUPIOfg+DFmf9EY1YMhaNlB7+3kK/ZlE6kqPfuxr1tsJ1XWkTrMtMoyHosU70d35mA==", + "dependencies": { + "@types/hast": "^2.0.0", + "extend": "^3.0.0", + "hast-util-has-property": "^2.0.0", + "hast-util-heading-rank": "^2.0.0", + "hast-util-is-element": "^2.0.0", + "unified": "^10.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-autolink-headings/node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/rehype-autolink-headings/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rehype-autolink-headings/node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/rehype-autolink-headings/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-autolink-headings/node_modules/unist-util-visit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", + "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-autolink-headings/node_modules/unist-util-visit-parents": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", + "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-7.0.1.tgz", + "integrity": "sha512-fOiR9a9xH+Le19i4fGzIEowAbwG7idy2Jzs4mOrFWBSJ0sNUgy0ev871dwWnbOo371SjgjG4pwzrbgSVrKxecw==", + "dependencies": { + "hast-util-from-parse5": "^6.0.0", + "parse5": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-slug": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-5.0.1.tgz", + "integrity": "sha512-X5v3wV/meuOX9NFcGhJvUpEjIvQl2gDvjg3z40RVprYFt7q3th4qMmYLULiu3gXvbNX1ppx+oaa6JyY1W67pTA==", + "dependencies": { + "@types/hast": "^2.0.0", + "github-slugger": "^1.1.1", + "hast-util-has-property": "^2.0.0", + "hast-util-heading-rank": "^2.0.0", + "hast-util-to-string": "^2.0.0", + "unified": "^10.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-slug/node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/rehype-slug/node_modules/hast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-2.0.0.tgz", + "integrity": "sha512-02AQ3vLhuH3FisaMM+i/9sm4OXGSq1UhOOCpTLLQtHdL3tZt7qil69r8M8iDkZYyC0HCFylcYoP+8IO7ddta1A==", + "dependencies": { + "@types/hast": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-slug/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rehype-slug/node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/rehype-slug/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-slug/node_modules/unist-util-visit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", + "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-slug/node_modules/unist-util-visit-parents": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", + "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.3.tgz", + "integrity": "sha512-kWiZ1bgyWlgOxpqD5HnxShKAdXtb2IUljn3hQAhySeak6IOQPPt6DeGnsIh4ixm7yKJWzm8TXFuC/lPfcWHJqw==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-to-html": "^8.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify/node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/rehype-stringify/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rehype-stringify/node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/rehype-stringify/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype/node_modules/@types/parse5": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", + "dev": true + }, + "node_modules/rehype/node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/rehype/node_modules/hast-util-from-parse5": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.0.tgz", + "integrity": "sha512-m8yhANIAccpU4K6+121KpPP55sSl9/samzQSQGpb0mTExcNh2WlvjtMwSWFhg6uqD4Rr6Nfa8N6TMypQM51rzQ==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "@types/parse5": "^6.0.0", + "@types/unist": "^2.0.0", + "hastscript": "^7.0.0", + "property-information": "^6.0.0", + "vfile": "^5.0.0", + "vfile-location": "^4.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype/node_modules/hast-util-parse-selector": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.0.tgz", + "integrity": "sha512-AyjlI2pTAZEOeu7GeBPZhROx0RHBnydkQIXlhnFzDi0qfXTmGUWoCYZtomHbrdrheV4VFUlPcfJ6LMF5T6sQzg==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype/node_modules/hastscript": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.0.2.tgz", + "integrity": "sha512-uA8ooUY4ipaBvKcMuPehTAB/YfFLSSzCwFSwT6ltJbocFUKH/GDHLN+tflq7lSRf9H86uOuxOFkh1KgIy3Gg2g==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^3.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rehype/node_modules/rehype-parse": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-8.0.4.tgz", + "integrity": "sha512-MJJKONunHjoTh4kc3dsM1v3C9kGrrxvA3U8PxZlP2SjH8RNUSrb+lF7Y0KVaUDnGH2QZ5vAn7ulkiajM9ifuqg==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^7.0.0", + "parse5": "^6.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype/node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/rehype/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype/node_modules/vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype/node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-code-titles": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/remark-code-titles/-/remark-code-titles-0.1.2.tgz", + "integrity": "sha512-KsHQbaI4FX8Ozxqk7YErxwmBiveUqloKuVqyPG2YPLHojpgomodWgRfG4B+bOtmn/5bfJ8khw4rR0lvgVFl2Uw==", + "dependencies": { + "unist-util-visit": "^1.4.0" + } + }, + "node_modules/remark-gfm": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", + "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-gfm": "^2.0.0", + "micromark-extension-gfm": "^2.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm/node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-gfm/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/remark-gfm/node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-gfm/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.1.2.tgz", + "integrity": "sha512-npQagPdczPAv0xN9F8GSi5hJfAe/z6nBjylyfOfjLOmz086ahWrIjlk4BulRfNhA+asutqWxyuT3DFVsxiTVHA==", + "dependencies": { + "mdast-util-mdx": "^2.0.0", + "micromark-extension-mdxjs": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", + "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse/node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-parse/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/remark-parse/node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-parse/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz", + "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-to-hast": "^12.1.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype/node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-rehype/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/remark-rehype/node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-rehype/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reselect": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.6.tgz", + "integrity": "sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==" + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==", + "optional": true + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", + "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz", + "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "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/string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", + "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.1", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", + "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stringify-entities/node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/styled-jsx": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.2.tgz", + "integrity": "sha512-LqPQrbBh3egD57NBcHET4qcgshPks+yblyhPlH2GY8oaDgKs8SK4C3dBh3oSJjgzJ3G5t1SYEZGHkP+QEpX9EQ==", + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/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/supports-hyperlinks/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/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.4.tgz", + "integrity": "sha512-NrxbFV4tYsga/hpWbRyUfIaBrNMXDxx5BsHgBS4v5tlyjf+sDsgBg5m9OxjrXIqAS/uR9kicxLKP+bEHI7BSeQ==", + "dependencies": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.14", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/tailwindcss/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==" + }, + "node_modules/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.1.tgz", + "integrity": "sha512-+ahUAE+iheqBTDxXhTisdA8hgvbEG1hHOQ9xmNjeUJSoi6DU/gMrKNcfZjHkyY6Alnuyc+ikYJaxxfHkT3+WuQ==", + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz", + "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==", + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.7", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.7.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/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==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "peer": true + }, + "node_modules/terser/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "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/throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "optional": true + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "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.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified/node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified/node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified/node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-builder": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.0.tgz", + "integrity": "sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-generated": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.0.tgz", + "integrity": "sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz", + "integrity": "sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position-from-estree": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.1.tgz", + "integrity": "sha512-xtoY50b5+7IH8tFbkw64gisG9tMSpxDjhX9TmaJJae/XuxQ9R/Kc8Nv1eOsf43Gt4KV/LkriMy9mptDr7XLcaw==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.1.tgz", + "integrity": "sha512-0yDkppiIhDlPrfHELgB+NLQD5mfjup3a8UYclHruTJWmY74je8g+CIFr79x5f6AkmzSwlvKLbs63hC0meOMowQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position/node_modules/unist-util-visit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", + "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position/node_modules/unist-util-visit-parents": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", + "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", + "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dependencies": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "dependencies": { + "unist-util-is": "^3.0.0" + } + }, + "node_modules/unist-util-visit-parents/node_modules/unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==" + }, + "node_modules/update-browserslist-db": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", + "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.1.0.tgz", + "integrity": "sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/uvu": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.4.tgz", + "integrity": "sha512-x1CyUjcP9VKaNPhjeB3FIc/jqgLsz2Q9LFhRzUTu/jnaaHILEGNuE0XckQonl8ISLcwyk9I2EZvWlYsQnwxqvQ==", + "dependencies": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + }, + "bin": { + "uvu": "bin.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/uvu/node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/vfile": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.4.tgz", + "integrity": "sha512-KI+7cnst03KbEyN1+JE504zF5bJBZa+J+CrevLeyIMq0aPU681I2rQ5p4PlnQ6exFtWiUrg26QUdFMnAKR6PIw==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-matter": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile-matter/-/vfile-matter-3.0.1.tgz", + "integrity": "sha512-CAAIDwnh6ZdtrqAuxdElUqQRQDQgbbIrYtDYI8gCjXS1qQ+1XdLoK8FIZWxJwn0/I+BkSSZpar3SOgjemQz4fg==", + "dependencies": { + "@types/js-yaml": "^4.0.0", + "is-buffer": "^2.0.0", + "js-yaml": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-matter/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/vfile-matter/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/vfile-message": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz", + "integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/webpack": { + "version": "5.73.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.73.0.tgz", + "integrity": "sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA==", + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.9.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "peer": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/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/wrap-ansi/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/wrap-ansi/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/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", + "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yaml": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", + "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/zwitch": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", + "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.6.tgz", + "integrity": "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ==", + "dev": true + }, + "@babel/core": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.6.tgz", + "integrity": "sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.6", + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helpers": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", + "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==", + "dev": true, + "requires": { + "@babel/types": "^7.18.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz", + "integrity": "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz", + "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz", + "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz", + "integrity": "sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz", + "integrity": "sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.6.tgz", + "integrity": "sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ==", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz", + "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==", + "dev": true + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/runtime": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz", + "integrity": "sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs3": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.6.tgz", + "integrity": "sha512-cOu5wH2JFBgMjje+a+fz2JNIWU4GzYpl05oSob3UDvBEh6EuIn+TXFHMmBbhSb+k/4HMzgKCQfEEDArAWNF9Cw==", + "dev": true, + "requires": { + "core-js-pure": "^3.20.2", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", + "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/traverse": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz", + "integrity": "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz", + "integrity": "sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "@headlessui/react": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.6.5.tgz", + "integrity": "sha512-3VkKteDxlxf3fE0KbfO9t60KC1lM7YNpZggLpwzVNg1J/zwL+h+4N7MBlFDVpInZI3rKlZGpNx0PWsG/9c2vQg==", + "requires": {} + }, + "@heroicons/react": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-1.0.6.tgz", + "integrity": "sha512-JJCXydOFWMDpCP4q13iEplA503MQO3xLoZiKum+955ZCtHINWnx26CUxVxxFQu/uLb4LW3ge15ZpzIkXKkJ8oQ==", + "requires": {} + }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/console": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.1.tgz", + "integrity": "sha512-0RiUocPVFEm3WRMOStIHbRWllG6iW6E3/gUPnf4lkrVFyXIIDeCe+vlKeYyFOMhB2EPE6FLFCNADSOOQMaqvyA==", + "dev": true, + "requires": { + "@jest/types": "^28.1.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.1", + "jest-util": "^28.1.1", + "slash": "^3.0.0" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/core": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.2.tgz", + "integrity": "sha512-Xo4E+Sb/nZODMGOPt2G3cMmCBqL4/W2Ijwr7/mrXlq4jdJwcFQ/9KrrJZT2adQRk2otVBXXOz1GRQ4Z5iOgvRQ==", + "dev": true, + "requires": { + "@jest/console": "^28.1.1", + "@jest/reporters": "^28.1.2", + "@jest/test-result": "^28.1.1", + "@jest/transform": "^28.1.2", + "@jest/types": "^28.1.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^28.0.2", + "jest-config": "^28.1.2", + "jest-haste-map": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.1", + "jest-resolve-dependencies": "^28.1.2", + "jest-runner": "^28.1.2", + "jest-runtime": "^28.1.2", + "jest-snapshot": "^28.1.2", + "jest-util": "^28.1.1", + "jest-validate": "^28.1.1", + "jest-watcher": "^28.1.1", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.1", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/environment": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.2.tgz", + "integrity": "sha512-I0CR1RUMmOzd0tRpz10oUfaChBWs+/Hrvn5xYhMEF/ZqrDaaeHwS8yDBqEWCrEnkH2g+WE/6g90oBv3nKpcm8Q==", + "dev": true, + "requires": { + "@jest/fake-timers": "^28.1.2", + "@jest/types": "^28.1.1", + "@types/node": "*", + "jest-mock": "^28.1.1" + } + }, + "@jest/expect": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.2.tgz", + "integrity": "sha512-HBzyZBeFBiOelNbBKN0pilWbbrGvwDUwAqMC46NVJmWm8AVkuE58NbG1s7DR4cxFt4U5cVLxofAoHxgvC5MyOw==", + "dev": true, + "requires": { + "expect": "^28.1.1", + "jest-snapshot": "^28.1.2" + } + }, + "@jest/expect-utils": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.1.tgz", + "integrity": "sha512-n/ghlvdhCdMI/hTcnn4qV57kQuV9OTsZzH1TTCVARANKhl6hXJqLKUkwX69ftMGpsbpt96SsDD8n8LD2d9+FRw==", + "dev": true, + "requires": { + "jest-get-type": "^28.0.2" + } + }, + "@jest/fake-timers": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.2.tgz", + "integrity": "sha512-xSYEI7Y0D5FbZN2LsCUj/EKRR1zfQYmGuAUVh6xTqhx7V5JhjgMcK5Pa0iR6WIk0GXiHDe0Ke4A+yERKE9saqg==", + "dev": true, + "requires": { + "@jest/types": "^28.1.1", + "@sinonjs/fake-timers": "^9.1.2", + "@types/node": "*", + "jest-message-util": "^28.1.1", + "jest-mock": "^28.1.1", + "jest-util": "^28.1.1" + } + }, + "@jest/globals": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.2.tgz", + "integrity": "sha512-cz0lkJVDOtDaYhvT3Fv2U1B6FtBnV+OpEyJCzTHM1fdoTsU4QNLAt/H4RkiwEUU+dL4g/MFsoTuHeT2pvbo4Hg==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.2", + "@jest/expect": "^28.1.2", + "@jest/types": "^28.1.1" + } + }, + "@jest/reporters": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.2.tgz", + "integrity": "sha512-/whGLhiwAqeCTmQEouSigUZJPVl7sW8V26EiboImL+UyXznnr1a03/YZ2BX8OlFw0n+Zlwu+EZAITZtaeRTxyA==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^28.1.1", + "@jest/test-result": "^28.1.1", + "@jest/transform": "^28.1.2", + "@jest/types": "^28.1.1", + "@jridgewell/trace-mapping": "^0.3.13", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^28.1.1", + "jest-util": "^28.1.1", + "jest-worker": "^28.1.1", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/schemas": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz", + "integrity": "sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.23.3" + } + }, + "@jest/source-map": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", + "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.13", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + } + }, + "@jest/test-result": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.1.tgz", + "integrity": "sha512-hPmkugBktqL6rRzwWAtp1JtYT4VHwv8OQ+9lE5Gymj6dHzubI/oJHMUpPOt8NrdVWSrz9S7bHjJUmv2ggFoUNQ==", + "dev": true, + "requires": { + "@jest/console": "^28.1.1", + "@jest/types": "^28.1.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.1.tgz", + "integrity": "sha512-nuL+dNSVMcWB7OOtgb0EGH5AjO4UBCt68SLP08rwmC+iRhyuJWS9MtZ/MpipxFwKAlHFftbMsydXqWre8B0+XA==", + "dev": true, + "requires": { + "@jest/test-result": "^28.1.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.1", + "slash": "^3.0.0" + } + }, + "@jest/transform": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.2.tgz", + "integrity": "sha512-3o+lKF6iweLeJFHBlMJysdaPbpoMmtbHEFsjzSv37HIq/wWt5ijTeO2Yf7MO5yyczCopD507cNwNLeX8Y/CuIg==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.1", + "@jridgewell/trace-mapping": "^0.3.13", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.1", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.1" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/types": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", + "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==" + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "peer": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "peer": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@mdx-js/loader": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-2.1.2.tgz", + "integrity": "sha512-P7CWhrqE5rZ3ewBngZ9t/zQPbSq42iuty78K3zJ8Bl518qnOX1d106c+n7I/zHODPAmw9JfYMQdbv9WrrHa0DA==", + "peer": true, + "requires": { + "@mdx-js/mdx": "^2.0.0", + "source-map": "^0.7.0" + }, + "dependencies": { + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "peer": true + } + } + }, + "@mdx-js/mdx": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-2.1.2.tgz", + "integrity": "sha512-ASN1GUH0gXsgJ2UD/Td7FzJo1SwFkkQ5V1i9at5o/ROra7brkyMcBsotsOWJWRzmXZaLw2uXWn4aN8B3PMNFMA==", + "requires": { + "@types/estree-jsx": "^0.0.1", + "@types/mdx": "^2.0.0", + "astring": "^1.6.0", + "estree-util-build-jsx": "^2.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "estree-walker": "^3.0.0", + "hast-util-to-estree": "^2.0.0", + "markdown-extensions": "^1.0.0", + "periscopic": "^3.0.0", + "remark-mdx": "^2.0.0", + "remark-parse": "^10.0.0", + "remark-rehype": "^10.0.0", + "unified": "^10.0.0", + "unist-util-position-from-estree": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "unist-util-visit": "^4.0.0", + "vfile": "^5.0.0" + }, + "dependencies": { + "bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" + }, + "is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" + }, + "trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==" + }, + "unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "requires": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + } + }, + "unist-util-visit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", + "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", + "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } + } + } + }, + "@mdx-js/react": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-2.1.2.tgz", + "integrity": "sha512-52e3DTJBrjsw3U51ZCdZ3N1IBaqnbzLIngCSXpKtiYiGr7PIqp3/P/+kym0MPTwBL/y9ZBmCieD8FyrXuEDrRw==", + "requires": { + "@types/mdx": "^2.0.0", + "@types/react": ">=16" + } + }, + "@next/env": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/env/-/env-12.2.0.tgz", + "integrity": "sha512-/FCkDpL/8SodJEXvx/DYNlOD5ijTtkozf4PPulYPtkPOJaMPpBSOkzmsta4fnrnbdH6eZjbwbiXFdr6gSQCV4w==" + }, + "@next/eslint-plugin-next": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.2.0.tgz", + "integrity": "sha512-nIj5xV/z3dOfeBnE7qFAjUQZAi4pTlIMuusRM6s/T6lOz8x7mjY5s1ZkTUBmcjPVCb2VIv3CrMH0WZL6xfjZZg==", + "dev": true, + "requires": { + "glob": "7.1.7" + } + }, + "@next/mdx": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/mdx/-/mdx-12.2.0.tgz", + "integrity": "sha512-obWsgfD0/1+OOr4PMQlSal34uhIDxkFe9Db+LaFfRDbsmD8+gb0YevUOV5KBoleEHXfDku0WAPUUmPmDiAxu1w==", + "requires": {} + }, + "@next/swc-android-arm-eabi": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.0.tgz", + "integrity": "sha512-hbneH8DNRB2x0Nf5fPCYoL8a0osvdTCe4pvOc9Rv5CpDsoOlf8BWBs2OWpeP0U2BktGvIsuUhmISmdYYGyrvTw==", + "optional": true + }, + "@next/swc-android-arm64": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.2.0.tgz", + "integrity": "sha512-1eEk91JHjczcJomxJ8X0XaUeNcp5Lx1U2Ic7j15ouJ83oRX+3GIslOuabW2oPkSgXbHkThMClhirKpvG98kwZg==", + "optional": true + }, + "@next/swc-darwin-arm64": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.0.tgz", + "integrity": "sha512-x5U5gJd7ZvrEtTFnBld9O2bUlX8opu7mIQUqRzj7KeWzBwPhrIzTTsQXAiNqsaMuaRPvyHBVW/5d/6g6+89Y8g==", + "optional": true + }, + "@next/swc-darwin-x64": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.0.tgz", + "integrity": "sha512-iwMNFsrAPjfedjKDv9AXPAV16PWIomP3qw/FfPaxkDVRbUls7BNdofBLzkQmqxqWh93WrawLwaqyXpJuAaiwJA==", + "optional": true + }, + "@next/swc-freebsd-x64": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.0.tgz", + "integrity": "sha512-gRiAw8g3Akf6niTDLEm1Emfa7jXDjvaAj/crDO8hKASKA4Y1fS4kbi/tyWw5VtoFI4mUzRmCPmZ8eL0tBSG58A==", + "optional": true + }, + "@next/swc-linux-arm-gnueabihf": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.0.tgz", + "integrity": "sha512-/TJZkxaIpeEwnXh6A40trgwd40C5+LJroLUOEQwMOJdavLl62PjCA6dGl1pgooWLCIb5YdBQ0EG4ylzvLwS2+Q==", + "optional": true + }, + "@next/swc-linux-arm64-gnu": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.0.tgz", + "integrity": "sha512-++WAB4ElXCSOKG9H8r4ENF8EaV+w0QkrpjehmryFkQXmt5juVXz+nKDVlCRMwJU7A1O0Mie82XyEoOrf6Np1pA==", + "optional": true + }, + "@next/swc-linux-arm64-musl": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.0.tgz", + "integrity": "sha512-XrqkHi/VglEn5zs2CYK6ofJGQySrd+Lr4YdmfJ7IhsCnMKkQY1ma9Hv5THwhZVof3e+6oFHrQ9bWrw9K4WTjFA==", + "optional": true + }, + "@next/swc-linux-x64-gnu": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.0.tgz", + "integrity": "sha512-MyhHbAKVjpn065WzRbqpLu2krj4kHLi6RITQdD1ee+uxq9r2yg5Qe02l24NxKW+1/lkmpusl4Y5Lks7rBiJn4w==", + "optional": true + }, + "@next/swc-linux-x64-musl": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.0.tgz", + "integrity": "sha512-Tz1tJZ5egE0S/UqCd5V6ZPJsdSzv/8aa7FkwFmIJ9neLS8/00za+OY5pq470iZQbPrkTwpKzmfTTIPRVD5iqDg==", + "optional": true + }, + "@next/swc-win32-arm64-msvc": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.0.tgz", + "integrity": "sha512-0iRO/CPMCdCYUzuH6wXLnsfJX1ykBX4emOOvH0qIgtiZM0nVYbF8lkEyY2ph4XcsurpinS+ziWuYCXVqrOSqiw==", + "optional": true + }, + "@next/swc-win32-ia32-msvc": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.0.tgz", + "integrity": "sha512-8A26RJVcJHwIKm8xo/qk2ePRquJ6WCI2keV2qOW/Qm+ZXrPXHMIWPYABae/nKN243YFBNyPiHytjX37VrcpUhg==", + "optional": true + }, + "@next/swc-win32-x64-msvc": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.0.tgz", + "integrity": "sha512-OI14ozFLThEV3ey6jE47zrzSTV/6eIMsvbwozo+XfdWqOPwQ7X00YkRx4GVMKMC0rM44oGS2gmwMKYpe4EblnA==", + "optional": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@reduxjs/toolkit": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.8.3.tgz", + "integrity": "sha512-lU/LDIfORmjBbyDLaqFN2JB9YmAT1BElET9y0ZszwhSBa5Ef3t6o5CrHupw5J1iOXwd+o92QfQZ8OJpwXvsssg==", + "requires": { + "immer": "^9.0.7", + "redux": "^4.1.2", + "redux-thunk": "^2.4.1", + "reselect": "^4.1.5" + } + }, + "@rushstack/eslint-patch": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz", + "integrity": "sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA==", + "dev": true + }, + "@sinclair/typebox": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz", + "integrity": "sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg==", + "dev": true + }, + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@swc/helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.2.tgz", + "integrity": "sha512-556Az0VX7WR6UdoTn4htt/l3zPQ7bsQWK+HqdG4swV7beUCxo/BqmvbOpUkTIm/9ih86LIf1qsUnywNL3obGHw==", + "requires": { + "tslib": "^2.4.0" + } + }, + "@tailwindcss/typography": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.2.tgz", + "integrity": "sha512-coq8DBABRPFcVhVIk6IbKyyHUt7YTEC/C992tatFB+yEx5WGBQrCgsSFjxHUr8AWXphWckadVJbominEduYBqw==", + "requires": { + "lodash.castarray": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2" + } + }, + "@testing-library/dom": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.14.0.tgz", + "integrity": "sha512-m8FOdUo77iMTwVRCyzWcqxlEIk+GnopbrRI15a0EaLbpZSCinIVI4kSQzWhkShK83GogvEFJSsHF3Ws0z1vrqA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^4.2.0", + "aria-query": "^5.0.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.4.4", + "pretty-format": "^27.0.2" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "aria-query": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", + "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@testing-library/react": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.3.0.tgz", + "integrity": "sha512-DB79aA426+deFgGSjnf5grczDPiL4taK3hFaa+M5q7q20Kcve9eQottOG5kZ74KEr55v0tU2CQormSSDK87zYQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.5.0", + "@types/react-dom": "^18.0.0" + } + }, + "@types/acorn": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", + "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "requires": { + "@types/estree": "*" + } + }, + "@types/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", + "dev": true + }, + "@types/babel__core": { + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", + "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", + "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "requires": { + "@types/ms": "*" + } + }, + "@types/eslint": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", + "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", + "peer": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "peer": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.52", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.52.tgz", + "integrity": "sha512-BZWrtCU0bMVAIliIV+HJO1f1PR41M7NKjfxrFJwwhKI1KwhwOxYw1SXg9ao+CIMt774nFuGiG6eU+udtbEI9oQ==" + }, + "@types/estree-jsx": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-0.0.1.tgz", + "integrity": "sha512-gcLAYiMfQklDCPjQegGn0TBAn9it05ISEsEhlKQUddIk7o2XDokOcTN7HBO8tznM0D9dGezvHEfRZBfZf6me0A==", + "requires": { + "@types/estree": "*" + } + }, + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/hast": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", + "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", + "requires": { + "@types/unist": "*" + } + }, + "@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "requires": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "28.1.4", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.4.tgz", + "integrity": "sha512-telv6G5N7zRJiLcI3Rs3o+ipZ28EnE+7EvF0pSrt2pZOMnAVI/f+6/LucDxOvcBcTeTL3JMF744BbVQAVBUQRA==", + "dev": true, + "requires": { + "jest-matcher-utils": "^28.0.0", + "pretty-format": "^28.0.0" + }, + "dependencies": { + "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 + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "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 + } + } + }, + "@types/js-yaml": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", + "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==" + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "@types/mdast": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", + "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", + "requires": { + "@types/unist": "*" + } + }, + "@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + }, + "@types/mdx": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.2.tgz", + "integrity": "sha512-mJGfgj4aWpiKb8C0nnJJchs1sHBHn0HugkVfqqyQi7Wn6mBRksLeQsPOFvih/Pu8L1vlDzfe/LidhVHBeUk3aQ==" + }, + "@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + }, + "@types/mysql": { + "version": "git+ssh://git@github.com/types/mysql.git#c26b1bc2bac17010081455e3127a90fb2eafcec9", + "dev": true, + "from": "@types/mysql@types/mysql" + }, + "@types/mysql2": { + "version": "git+ssh://git@github.com/types/mysql2.git#89378b2cb3974ea8cdd1d633b8f056e54e5d2384", + "dev": true, + "from": "@types/mysql2@github:types/mysql2", + "requires": { + "@types/mysql": "types/mysql" + } + }, + "@types/node": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", + "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" + }, + "@types/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" + }, + "@types/prettier": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", + "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "@types/react": { + "version": "18.0.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.14.tgz", + "integrity": "sha512-x4gGuASSiWmo0xjDLpm5mPb52syZHJx02VKbqUKdLmKtAwIh63XClGsiTI1K6DO5q7ox4xAsQrU+Gl3+gGXF9Q==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "18.0.5", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.5.tgz", + "integrity": "sha512-OWPWTUrY/NIrjsAPkAk1wW9LZeIjSvkXRhclsFO8CZcZGCOg2G0YZy4ft+rOyYxy8B7ui5iZzi9OkDebZ7/QSA==", + "devOptional": true, + "requires": { + "@types/react": "*" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "@types/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" + }, + "@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.3.tgz", + "integrity": "sha512-QEgE1uahnDbWEkZlidq7uKB630ny1NN8KbLPmznX+8hYsYpoV1/quG1Nzvs141FVuumuS7O0EpqYw3RB4AVzRg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.30.3", + "@typescript-eslint/type-utils": "5.30.3", + "@typescript-eslint/utils": "5.30.3", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.3.tgz", + "integrity": "sha512-ddwGEPC3E49DduAUC8UThQafHRE5uc1NE8jdOgl+w8/NrYF50MJQNeD3u4JZrqAXdY9rJz0CdQ9HpNME20CzkA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.30.3", + "@typescript-eslint/types": "5.30.3", + "@typescript-eslint/typescript-estree": "5.30.3", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.3.tgz", + "integrity": "sha512-yVJIIUXeo/vv6Alj6lKBvsqnRs5hcxUpN3Dg3aD9Zv6r7p6Nn106jJcr5rnpRHAReEb/aMI2RWrt3JmL17eCVA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.30.3", + "@typescript-eslint/visitor-keys": "5.30.3" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.3.tgz", + "integrity": "sha512-IIzakE7OXOqdwPaXhRiPnaZ8OuJJYBLufOffd9fqzkI4IMFIYq8KC7bghdnF7QUJTirURRErQFrJ/w5UpwIqaw==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.30.3", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.3.tgz", + "integrity": "sha512-vshU3pjSTgBPNgfd55JLYngHkXuwQP68fxYFUAg1Uq+JrR3xG/XjvL9Dmv28CpOERtqwkaR4QQ3mD0NLZcE2Xw==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.3.tgz", + "integrity": "sha512-jqVh5N9AJx6+7yRgoA+ZelAFrHezgI9pzI9giv7s84DDOmtpFwTgURcpICDHyz9x6vAeOu91iACZ4dBTVfzIyA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.30.3", + "@typescript-eslint/visitor-keys": "5.30.3", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.3.tgz", + "integrity": "sha512-OEaBXGxxdIy35H+jyXfYAMQ66KMJczK9hEhL3gR6IRbWe5PyK+bPDC9zbQNVII6rNFTfF/Mse0z21NlEU+vOMw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.30.3", + "@typescript-eslint/types": "5.30.3", + "@typescript-eslint/typescript-estree": "5.30.3", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.3.tgz", + "integrity": "sha512-ep2xtHOhnSRt6fDP9DSSxrA/FqZhdMF7/Y9fYsxrKss2uWJMbzJyBJ/We1fKc786BJ10pHwrzUlhvpz8i7XzBg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.30.3", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "peer": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "peer": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "peer": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "peer": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "peer": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "peer": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "peer": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "peer": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "peer": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "peer": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "peer": true + }, + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==" + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "peer": true, + "requires": {} + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "requires": {} + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + } + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peer": true, + "requires": {} + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, + "array-includes": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", + "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array.prototype.flat": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", + "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + } + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "astring": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.3.tgz", + "integrity": "sha512-sRpyiNrx2dEYIMmUXprS8nlpRg2Drs8m9ElX9vVEXaCB4XEAJhKfs7IcX0IwShjuOAjLR6wzIrgoptz1n19i1A==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "autoprefixer": { + "version": "10.4.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", + "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", + "dev": true, + "requires": { + "browserslist": "^4.20.3", + "caniuse-lite": "^1.0.30001335", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "axe-core": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.2.tgz", + "integrity": "sha512-LVAaGp/wkkgYJcjmHsoKx4juT1aQvJyPcW09MLCjVTh3V2cc6PnyempiLMNH5iMdfIX/zdbjUx2KDjMLCTdPeA==", + "dev": true + }, + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "babel-jest": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.2.tgz", + "integrity": "sha512-pfmoo6sh4L/+5/G2OOfQrGJgvH7fTa1oChnuYH2G/6gA+JwDvO8PELwvwnofKBMNrQsam0Wy/Rw+QSrBNewq2Q==", + "dev": true, + "requires": { + "@jest/transform": "^28.1.2", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^28.1.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.1.tgz", + "integrity": "sha512-NovGCy5Hn25uMJSAU8FaHqzs13cFoOI4lhIujiepssjCKRsAo3TA734RDWSGxuFTsUJXerYOqQQodlxgmtqbzw==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.1.tgz", + "integrity": "sha512-FCq9Oud0ReTeWtcneYf/48981aTfXYuB9gbU4rBNNJVBSQ6ssv7E6v/qvbBxtOWwZFXjLZwpg+W3q7J6vhH25g==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^28.1.1", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", + "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==", + "requires": { + "caniuse-lite": "^1.0.30001359", + "electron-to-chromium": "^1.4.172", + "node-releases": "^2.0.5", + "update-browserslist-db": "^1.0.4" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" + }, + "caniuse-lite": { + "version": "1.0.30001361", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001361.tgz", + "integrity": "sha512-ybhCrjNtkFji1/Wto6SSJKkWk6kZgVQsDq5QI83SafsF6FXv2JB4df9eEdH6g8sdGgqTXrFLjAxqBGgYoU3azQ==" + }, + "ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, + "character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==" + }, + "character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==" + }, + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "peer": true + }, + "ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + }, + "cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "requires": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + } + }, + "clipboard": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", + "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", + "optional": true, + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, + "clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "comma-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz", + "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==" + }, + "commander": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.3.0.tgz", + "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "core-js-pure": { + "version": "3.23.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.3.tgz", + "integrity": "sha512-XpoouuqIj4P+GWtdyV8ZO3/u4KftkeDVMfvp+308eGMhCrA3lVDSmAxO0c6GGOcmgVlaKDrgWVMo49h2ab/TDA==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "csstype": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", + "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + }, + "damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "date-fns": { + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz", + "integrity": "sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "requires": { + "character-entities": "^2.0.0" + } + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "optional": true + }, + "denque": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", + "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==" + }, + "dequal": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz", + "integrity": "sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==" + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "requires": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + } + }, + "didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==" + }, + "diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "dev": true + }, + "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, + "requires": { + "path-type": "^4.0.0" + } + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-accessibility-api": { + "version": "0.5.14", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz", + "integrity": "sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==", + "dev": true + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.177", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.177.tgz", + "integrity": "sha512-FYPir3NSBEGexSZUEeht81oVhHfLFl6mhUKSkjHN/iB/TwEIt/WHQrqVGfTLN5gQxwJCQkIJBe05eOXjI7omgg==" + }, + "emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "peer": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "peer": true + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "eslint": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz", + "integrity": "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "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 + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "eslint-config-next": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.2.0.tgz", + "integrity": "sha512-QWzNegadFXjQ0h3hixnLacRM9Kot85vQefyNsA8IeOnERZMz0Gvays1W6DMCjSxJbnCwuWaMXj9DCpar5IahRA==", + "dev": true, + "requires": { + "@next/eslint-plugin-next": "12.2.0", + "@rushstack/eslint-patch": "^1.1.3", + "@typescript-eslint/parser": "^5.21.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^2.7.1", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.29.4", + "eslint-plugin-react-hooks": "^4.5.0" + } + }, + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "requires": {} + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-import-resolver-typescript": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", + "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "glob": "^7.2.0", + "is-glob": "^4.0.3", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "eslint-module-utils": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + } + } + }, + "eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.0.tgz", + "integrity": "sha512-kTeLuIzpNhXL2CwLlc8AHI0aFRwWHcg483yepO9VQiHzM9bZwJdzTkzBszbuPrbgGmq2rlX/FaT2fJQsjUSHsw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.18.3", + "aria-query": "^4.2.2", + "array-includes": "^3.1.5", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.4.2", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.1", + "language-tags": "^1.0.5", + "minimatch": "^3.1.2", + "semver": "^6.3.0" + } + }, + "eslint-plugin-react": { + "version": "7.30.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz", + "integrity": "sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg==", + "dev": true, + "requires": { + "array-includes": "^3.1.5", + "array.prototype.flatmap": "^1.3.0", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.1", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.7" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } + } + }, + "eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "requires": {} + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + } + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "dev": true, + "requires": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + }, + "estree-util-attach-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-2.0.1.tgz", + "integrity": "sha512-1wTBNndwMIsnvnuxjFIaYQz0M7PsCvcgP0YD7/dU8xWh1FuHk+O6pYpT4sLa5THY/CywJvdIdgw4uhozujga/g==", + "requires": { + "@types/estree": "^0.0.51" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + } + } + }, + "estree-util-build-jsx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-2.1.0.tgz", + "integrity": "sha512-gsBGfsY6LOJUIDwmMkTOcgCX+3r/LUjRBccgHMSW55PHjhZsV13RmPl/iwpAvW8KcQqoN9P0FEFWTSS2Zc5bGA==", + "requires": { + "@types/estree-jsx": "^0.0.1", + "estree-util-is-identifier-name": "^2.0.0", + "estree-walker": "^3.0.0" + } + }, + "estree-util-is-identifier-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.0.1.tgz", + "integrity": "sha512-rxZj1GkQhY4x1j/CSnybK9cGuMFQYFPLq0iNyopqf14aOVLFtMv7Esika+ObJWPWiOHuMOAHz3YkWoLYYRnzWQ==" + }, + "estree-util-visit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-1.1.0.tgz", + "integrity": "sha512-3lXJ4Us9j8TUif9cWcQy81t9p5OLasnDuuhrFiqb+XstmKC1d1LmrQWYsY49/9URcfHE64mPypDBaNK9NwWDPQ==", + "requires": { + "@types/estree-jsx": "^0.0.1", + "@types/unist": "^2.0.0" + } + }, + "estree-walker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.1.tgz", + "integrity": "sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "peer": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true + }, + "expect": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.1.tgz", + "integrity": "sha512-/AANEwGL0tWBwzLNOvO0yUdy2D52jVdNXppOqswC49sxMN2cPWsGCQdzuIf9tj6hHoBQzNvx75JUYuQAckPo3w==", + "dev": true, + "requires": { + "@jest/expect-utils": "^28.1.1", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-util": "^28.1.1" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "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==" + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "requires": { + "reusify": "^1.0.4" + } + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "dev": true + }, + "follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" + }, + "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==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "requires": { + "is-property": "^1.0.2" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "github-slugger": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", + "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==" + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "peer": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", + "optional": true, + "requires": { + "delegate": "^3.1.2" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "requires": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + } + }, + "harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "hast-util-from-parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", + "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", + "requires": { + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + }, + "dependencies": { + "property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "requires": { + "xtend": "^4.0.0" + } + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "requires": { + "@types/unist": "^2.0.2" + } + }, + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + } + } + }, + "hast-util-has-property": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-2.0.0.tgz", + "integrity": "sha512-4Qf++8o5v14us4Muv3HRj+Er6wTNGA/N9uCaZMty4JWvyFKLdhULrv4KE1b65AthsSO9TXSZnjuxS8ecIyhb0w==" + }, + "hast-util-heading-rank": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-2.1.0.tgz", + "integrity": "sha512-w+Rw20Q/iWp2Bcnr6uTrYU6/ftZLbHKhvc8nM26VIWpDqDMlku2iXUVTeOlsdoih/UKQhY7PHQ+vZ0Aqq8bxtQ==", + "requires": { + "@types/hast": "^2.0.0" + } + }, + "hast-util-is-element": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.2.tgz", + "integrity": "sha512-thjnlGAnwP8ef/GSO1Q8BfVk2gundnc2peGQqEg2kUt/IqesiGg/5mSwN2fE7nLzy61pg88NG6xV+UrGOrx9EA==", + "requires": { + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0" + } + }, + "hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==" + }, + "hast-util-to-estree": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-2.0.2.tgz", + "integrity": "sha512-UQrZVeBj6A9od0lpFvqHKNSH9zvDrNoyWKbveu1a2oSCXEDUI+3bnd6BoiQLPnLrcXXn/jzJ6y9hmJTTlvf8lQ==", + "requires": { + "@types/estree-jsx": "^0.0.1", + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "estree-util-attach-comments": "^2.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "hast-util-whitespace": "^2.0.0", + "mdast-util-mdx-expression": "^1.0.0", + "mdast-util-mdxjs-esm": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^0.3.0", + "unist-util-position": "^4.0.0", + "zwitch": "^2.0.0" + } + }, + "hast-util-to-html": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.3.tgz", + "integrity": "sha512-/D/E5ymdPYhHpPkuTHOUkSatxr4w1ZKrZsG0Zv/3C2SRVT0JFJG53VS45AMrBtYk0wp5A7ksEhiC8QaOZM95+A==", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-is-element": "^2.0.0", + "hast-util-whitespace": "^2.0.0", + "html-void-elements": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.2", + "unist-util-is": "^5.0.0" + } + }, + "hast-util-to-string": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-1.0.4.tgz", + "integrity": "sha512-eK0MxRX47AV2eZ+Lyr18DCpQgodvaS3fAQO2+b9Two9F5HEoRPhiUMNzoXArMJfZi2yieFzUBMRl3HNJ3Jus3w==" + }, + "hast-util-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz", + "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==" + }, + "hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "requires": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "dependencies": { + "comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" + }, + "property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "requires": { + "xtend": "^4.0.0" + } + }, + "space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" + } + } + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "html-void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz", + "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==", + "dev": true + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "husky": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", + "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", + "dev": true + }, + "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==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", + "dev": true, + "requires": { + "harmony-reflect": "^1.4.6" + } + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "immer": { + "version": "9.0.15", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz", + "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==" + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "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 + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==" + }, + "is-reference": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.0.tgz", + "integrity": "sha512-Eo1W3wUoHWoCoVM4GVl/a+K0IgiqE5aIo4kJABFyMum1ZORlPkC+UC357sSQUL5w5QCE5kCC9upl75b7+7CY/Q==", + "requires": { + "@types/estree": "*" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", + "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.2.tgz", + "integrity": "sha512-Tuf05DwLeCh2cfWCQbcz9UxldoDyiR1E9Igaei5khjonKncYdc6LDfynKCEWozK0oLE3GD+xKAo2u8x/0s6GOg==", + "dev": true, + "requires": { + "@jest/core": "^28.1.2", + "@jest/types": "^28.1.1", + "import-local": "^3.0.2", + "jest-cli": "^28.1.2" + } + }, + "jest-changed-files": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.0.2.tgz", + "integrity": "sha512-QX9u+5I2s54ZnGoMEjiM2WeBvJR2J7w/8ZUmH2um/WLAuGAYFQcsVXY9+1YL6k0H/AGUdH8pXUAv6erDqEsvIA==", + "dev": true, + "requires": { + "execa": "^5.0.0", + "throat": "^6.0.1" + } + }, + "jest-circus": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.2.tgz", + "integrity": "sha512-E2vdPIJG5/69EMpslFhaA46WkcrN74LI5V/cSJ59L7uS8UNoXbzTxmwhpi9XrIL3zqvMt5T0pl5k2l2u2GwBNQ==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.2", + "@jest/expect": "^28.1.2", + "@jest/test-result": "^28.1.1", + "@jest/types": "^28.1.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^28.1.1", + "jest-matcher-utils": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-runtime": "^28.1.2", + "jest-snapshot": "^28.1.2", + "jest-util": "^28.1.1", + "pretty-format": "^28.1.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-cli": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.2.tgz", + "integrity": "sha512-l6eoi5Do/IJUXAFL9qRmDiFpBeEJAnjJb1dcd9i/VWfVWbp3mJhuH50dNtX67Ali4Ecvt4eBkWb4hXhPHkAZTw==", + "dev": true, + "requires": { + "@jest/core": "^28.1.2", + "@jest/test-result": "^28.1.1", + "@jest/types": "^28.1.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^28.1.2", + "jest-util": "^28.1.1", + "jest-validate": "^28.1.1", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-config": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.2.tgz", + "integrity": "sha512-g6EfeRqddVbjPVBVY4JWpUY4IvQoFRIZcv4V36QkqzE0IGhEC/VkugFeBMAeUE7PRgC8KJF0yvJNDeQRbamEVA==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^28.1.1", + "@jest/types": "^28.1.1", + "babel-jest": "^28.1.2", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^28.1.2", + "jest-environment-node": "^28.1.2", + "jest-get-type": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.1", + "jest-runner": "^28.1.2", + "jest-util": "^28.1.1", + "jest-validate": "^28.1.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^28.1.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-diff": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.1.tgz", + "integrity": "sha512-/MUUxeR2fHbqHoMMiffe/Afm+U8U4olFRJ0hiVG2lZatPJcnGxx292ustVu7bULhjV65IYMxRdploAKLbcrsyg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.1" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-docblock": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", + "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.1.tgz", + "integrity": "sha512-A042rqh17ZvEhRceDMi784ppoXR7MWGDEKTXEZXb4svt0eShMZvijGxzKsx+yIjeE8QYmHPrnHiTSQVhN4nqaw==", + "dev": true, + "requires": { + "@jest/types": "^28.1.1", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "jest-util": "^28.1.1", + "pretty-format": "^28.1.1" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-environment-node": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.2.tgz", + "integrity": "sha512-oYsZz9Qw27XKmOgTtnl0jW7VplJkN2oeof+SwAwKFQacq3CLlG9u4kTGuuLWfvu3J7bVutWlrbEQMOCL/jughw==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.2", + "@jest/fake-timers": "^28.1.2", + "@jest/types": "^28.1.1", + "@types/node": "*", + "jest-mock": "^28.1.1", + "jest-util": "^28.1.1" + } + }, + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + }, + "jest-haste-map": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.1.tgz", + "integrity": "sha512-ZrRSE2o3Ezh7sb1KmeLEZRZ4mgufbrMwolcFHNRSjKZhpLa8TdooXOOFlSwoUzlbVs1t0l7upVRW2K7RWGHzbQ==", + "dev": true, + "requires": { + "@jest/types": "^28.1.1", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.1", + "jest-worker": "^28.1.1", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-leak-detector": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.1.tgz", + "integrity": "sha512-4jvs8V8kLbAaotE+wFR7vfUGf603cwYtFf1/PYEsyX2BAjSzj8hQSVTP6OWzseTl0xL6dyHuKs2JAks7Pfubmw==", + "dev": true, + "requires": { + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.1" + }, + "dependencies": { + "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 + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "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 + } + } + }, + "jest-matcher-utils": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz", + "integrity": "sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.1" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-message-util": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", + "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-mock": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.1.tgz", + "integrity": "sha512-bDCb0FjfsmKweAvE09dZT59IMkzgN0fYBH6t5S45NoJfd2DHkS3ySG2K+hucortryhO3fVuXdlxWcbtIuV/Skw==", + "dev": true, + "requires": { + "@jest/types": "^28.1.1", + "@types/node": "*" + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true + }, + "jest-resolve": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.1.tgz", + "integrity": "sha512-/d1UbyUkf9nvsgdBildLe6LAD4DalgkgZcKd0nZ8XUGPyA/7fsnaQIlKVnDiuUXv/IeZhPEDrRJubVSulxrShA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^28.1.1", + "jest-validate": "^28.1.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-resolve-dependencies": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.2.tgz", + "integrity": "sha512-OXw4vbOZuyRTBi3tapWBqdyodU+T33ww5cPZORuTWkg+Y8lmsxQlVu3MWtJh6NMlKRTHQetF96yGPv01Ye7Mbg==", + "dev": true, + "requires": { + "jest-regex-util": "^28.0.2", + "jest-snapshot": "^28.1.2" + } + }, + "jest-runner": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.2.tgz", + "integrity": "sha512-6/k3DlAsAEr5VcptCMdhtRhOoYClZQmxnVMZvZ/quvPGRpN7OBQYPIC32tWSgOnbgqLXNs5RAniC+nkdFZpD4A==", + "dev": true, + "requires": { + "@jest/console": "^28.1.1", + "@jest/environment": "^28.1.2", + "@jest/test-result": "^28.1.1", + "@jest/transform": "^28.1.2", + "@jest/types": "^28.1.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "graceful-fs": "^4.2.9", + "jest-docblock": "^28.1.1", + "jest-environment-node": "^28.1.2", + "jest-haste-map": "^28.1.1", + "jest-leak-detector": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-resolve": "^28.1.1", + "jest-runtime": "^28.1.2", + "jest-util": "^28.1.1", + "jest-watcher": "^28.1.1", + "jest-worker": "^28.1.1", + "source-map-support": "0.5.13", + "throat": "^6.0.1" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-runtime": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.2.tgz", + "integrity": "sha512-i4w93OsWzLOeMXSi9epmakb2+3z0AchZtUQVF1hesBmcQQy4vtaql5YdVe9KexdJaVRyPDw8DoBR0j3lYsZVYw==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.2", + "@jest/fake-timers": "^28.1.2", + "@jest/globals": "^28.1.2", + "@jest/source-map": "^28.1.2", + "@jest/test-result": "^28.1.1", + "@jest/transform": "^28.1.2", + "@jest/types": "^28.1.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-mock": "^28.1.1", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.1", + "jest-snapshot": "^28.1.2", + "jest-util": "^28.1.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-snapshot": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.2.tgz", + "integrity": "sha512-wzrieFttZYfLvrCVRJxX+jwML2YTArOUqFpCoSVy1QUapx+LlV9uLbV/mMEhYj4t7aMeE9aSQFHSvV/oNoDAMA==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^28.1.1", + "@jest/transform": "^28.1.2", + "@jest/types": "^28.1.1", + "@types/babel__traverse": "^7.0.6", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^28.1.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^28.1.1", + "jest-get-type": "^28.0.2", + "jest-haste-map": "^28.1.1", + "jest-matcher-utils": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-util": "^28.1.1", + "natural-compare": "^1.4.0", + "pretty-format": "^28.1.1", + "semver": "^7.3.5" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-util": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", + "dev": true, + "requires": { + "@jest/types": "^28.1.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-validate": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.1.tgz", + "integrity": "sha512-Kpf6gcClqFCIZ4ti5++XemYJWUPCFUW+N2gknn+KgnDf549iLul3cBuKVe1YcWRlaF8tZV8eJCap0eECOEE3Ug==", + "dev": true, + "requires": { + "@jest/types": "^28.1.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^28.0.2", + "leven": "^3.1.0", + "pretty-format": "^28.1.1" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-watch-typeahead": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", + "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^28.0.0", + "jest-watcher": "^28.0.0", + "slash": "^4.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "char-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", + "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", + "dev": true + }, + "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, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + }, + "string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "dev": true, + "requires": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-watcher": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.1.tgz", + "integrity": "sha512-RQIpeZ8EIJMxbQrXpJQYIIlubBnB9imEHsxxE41f54ZwcqWLysL/A0ZcdMirf+XsMn3xfphVQVV4EW0/p7i7Ug==", + "dev": true, + "requires": { + "@jest/test-result": "^28.1.1", + "@jest/types": "^28.1.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.1", + "string-length": "^4.0.1" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-worker": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.1.tgz", + "integrity": "sha512-Au7slXB08C6h+xbJPp7VIb6U0XX5Kc9uel/WFc6/rcTzGiaVCBRngBExSYuXSLFPULPSYU3cJ3ybS988lNFQhQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "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 + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "jsx-ast-utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.1.tgz", + "integrity": "sha512-pxrjmNpeRw5wwVeWyEAk7QJu2GnBO3uzPFmHCKJJFPKK2Cy0cWL23krGtLdnMmbIi6/FjlrQpPyfQI19ByPOhQ==", + "dev": true, + "requires": { + "array-includes": "^3.1.5", + "object.assign": "^4.1.2" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "language-subtag-registry": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", + "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", + "dev": true + }, + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dev": true, + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lilconfig": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", + "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==" + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "lint-staged": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.0.3.tgz", + "integrity": "sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==", + "dev": true, + "requires": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.17", + "commander": "^9.3.0", + "debug": "^4.3.4", + "execa": "^6.1.0", + "lilconfig": "2.0.5", + "listr2": "^4.0.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.2", + "pidtree": "^0.6.0", + "string-argv": "^0.3.1", + "yaml": "^2.1.1" + }, + "dependencies": { + "execa": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, + "human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "dev": true + }, + "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 + }, + "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 + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + } + }, + "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, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "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 + }, + "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 + } + } + }, + "listr2": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", + "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.5", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "peer": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash.castarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "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, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "longest-streak": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.1.tgz", + "integrity": "sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "lz-string": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", + "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==", + "dev": true + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "markdown-extensions": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-1.1.1.tgz", + "integrity": "sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==" + }, + "markdown-table": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.2.tgz", + "integrity": "sha512-y8j3a5/DkJCmS5x4dMCQL+OR0+2EAq3DOtio1COSHsmW2BGXnNCK3v12hJt1LrUz5iZH5g0LmuYOjDdI+czghA==" + }, + "mdast-util-definitions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.1.tgz", + "integrity": "sha512-rQ+Gv7mHttxHOBx2dkF4HWTg+EE+UR78ptQWDylzPKaQuVGdG4HIoY3SrS/pCp80nZ04greFvXbVFHT+uf0JVQ==", + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "dependencies": { + "unist-util-visit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", + "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", + "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } + } + } + }, + "mdast-util-find-and-replace": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.0.tgz", + "integrity": "sha512-bz8hUWkMX7UcasORORcyBEsTKJ+dBiFwRPrm43hHC9NMRylIMLbfO5rwfeCN+UtY4AAi7s8WqXftb9eX6ZsqCg==", + "requires": { + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" + }, + "unist-util-visit-parents": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", + "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } + } + } + }, + "mdast-util-from-markdown": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", + "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + } + }, + "mdast-util-gfm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.1.tgz", + "integrity": "sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==", + "requires": { + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-gfm-autolink-literal": "^1.0.0", + "mdast-util-gfm-footnote": "^1.0.0", + "mdast-util-gfm-strikethrough": "^1.0.0", + "mdast-util-gfm-table": "^1.0.0", + "mdast-util-gfm-task-list-item": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + } + }, + "mdast-util-gfm-autolink-literal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.2.tgz", + "integrity": "sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg==", + "requires": { + "@types/mdast": "^3.0.0", + "ccount": "^2.0.0", + "mdast-util-find-and-replace": "^2.0.0", + "micromark-util-character": "^1.0.0" + } + }, + "mdast-util-gfm-footnote": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.1.tgz", + "integrity": "sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw==", + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0", + "micromark-util-normalize-identifier": "^1.0.0" + } + }, + "mdast-util-gfm-strikethrough": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.1.tgz", + "integrity": "sha512-zKJbEPe+JP6EUv0mZ0tQUyLQOC+FADt0bARldONot/nefuISkaZFlmVK4tU6JgfyZGrky02m/I6PmehgAgZgqg==", + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0" + } + }, + "mdast-util-gfm-table": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.4.tgz", + "integrity": "sha512-aEuoPwZyP4iIMkf2cLWXxx3EQ6Bmh2yKy9MVCg4i6Sd3cX80dcLEfXO/V4ul3pGH9czBK4kp+FAl+ZHmSUt9/w==", + "requires": { + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.3.0" + } + }, + "mdast-util-gfm-task-list-item": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.1.tgz", + "integrity": "sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA==", + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0" + } + }, + "mdast-util-mdx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-2.0.0.tgz", + "integrity": "sha512-M09lW0CcBT1VrJUaF/PYxemxxHa7SLDHdSn94Q9FhxjCQfuW7nMAWKWimTmA3OyDMSTH981NN1csW1X+HPSluw==", + "requires": { + "mdast-util-mdx-expression": "^1.0.0", + "mdast-util-mdx-jsx": "^2.0.0", + "mdast-util-mdxjs-esm": "^1.0.0" + } + }, + "mdast-util-mdx-expression": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.2.1.tgz", + "integrity": "sha512-BtQwyalaq6jRjx0pagtuAwGrmzL1yInrfA4EJv7GOoiPOUbR4gr6h65I+G3WTh1/Cag2Eda4ip400Ch6CFmWiA==", + "requires": { + "@types/estree-jsx": "^0.0.1", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + } + }, + "mdast-util-mdx-jsx": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.0.1.tgz", + "integrity": "sha512-oPC7/smPBf7vxnvIYH5y3fPo2lw1rdrswFfSb4i0GTAXRUQv7JUU/t/hbp07dgGdUFTSDOHm5DNamhNg/s2Hrg==", + "requires": { + "@types/estree-jsx": "^0.0.1", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "ccount": "^2.0.0", + "mdast-util-to-markdown": "^1.3.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-remove-position": "^4.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "dependencies": { + "character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==" + }, + "character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==" + }, + "is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==" + }, + "is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "requires": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + } + }, + "is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==" + }, + "is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==" + }, + "parse-entities": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.0.tgz", + "integrity": "sha512-5nk9Fn03x3rEhGaX1FU6IDwG/k+GxLXlFAkgrbM1asuAFl3BhdQWvASaIsmwWypRNcZKHPYnIuOSfIWEyEQnPQ==", + "requires": { + "@types/unist": "^2.0.0", + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + } + } + } + }, + "mdast-util-mdxjs-esm": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.2.0.tgz", + "integrity": "sha512-IPpX9GBzAIbIRCjbyeLDpMhACFb0wxTIujuR3YElB8LWbducUdMgRJuqs/Vg8xQ1bIAMm7lw8L+YNtua0xKXRw==", + "requires": { + "@types/estree-jsx": "^0.0.1", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + } + }, + "mdast-util-to-hast": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.1.1.tgz", + "integrity": "sha512-qE09zD6ylVP14jV4mjLIhDBOrpFdShHZcEsYvvKGABlr9mGbV7mTlRWdoFxL/EYSTNDiC9GZXy7y8Shgb9Dtzw==", + "requires": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "@types/mdurl": "^1.0.0", + "mdast-util-definitions": "^5.0.0", + "mdurl": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "unist-builder": "^3.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "dependencies": { + "unist-util-visit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", + "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", + "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } + } + } + }, + "mdast-util-to-markdown": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.3.0.tgz", + "integrity": "sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==", + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "longest-streak": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "micromark-util-decode-string": "^1.0.0", + "unist-util-visit": "^4.0.0", + "zwitch": "^2.0.0" + }, + "dependencies": { + "unist-util-visit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", + "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", + "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } + } + } + }, + "mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==" + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, + "mdx-prism": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/mdx-prism/-/mdx-prism-0.3.4.tgz", + "integrity": "sha512-Ijy/BB0NINK5Vn6WgOATgX75q6JEdWcGZuXtpePoGiILbjEWFiOkacTdGDpu+VGTrxu0nszlX2Spkf0bhC5O6A==", + "requires": { + "hast-util-to-string": "^1.0.0", + "parse-numeric-range": "^0.0.2", + "refractor": "3.3.0", + "rehype": "^11.0.0", + "rehype-parse": "^7.0.1", + "unified": "^9.2.1", + "unist-util-visit": "^1.1.3" + }, + "dependencies": { + "ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==" + }, + "character-entities-html4": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", + "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==" + }, + "comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" + }, + "hast-util-is-element": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz", + "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==" + }, + "hast-util-to-html": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-7.1.3.tgz", + "integrity": "sha512-yk2+1p3EJTEE9ZEUkgHsUSVhIpCsL/bvT8E5GzmWc+N1Po5gBw+0F8bo7dpxXR0nu0bQVxVZGX2lBGF21CmeDw==", + "requires": { + "ccount": "^1.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-is-element": "^1.0.0", + "hast-util-whitespace": "^1.0.0", + "html-void-elements": "^1.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0", + "stringify-entities": "^3.0.1", + "unist-util-is": "^4.0.0", + "xtend": "^4.0.0" + } + }, + "hast-util-whitespace": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz", + "integrity": "sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==" + }, + "html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" + }, + "property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "requires": { + "xtend": "^4.0.0" + } + }, + "rehype": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-11.0.0.tgz", + "integrity": "sha512-qXqRqiCFJD5CJ61CSJuNImTFrm3zVkOU9XywHDwrUuvWN74MWt72KJ67c5CM5x8g0vGcOkRVCrYj85vqkmHulQ==", + "requires": { + "rehype-parse": "^7.0.0", + "rehype-stringify": "^8.0.0", + "unified": "^9.0.0" + } + }, + "rehype-stringify": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-8.0.0.tgz", + "integrity": "sha512-VkIs18G0pj2xklyllrPSvdShAV36Ff3yE5PUO9u36f6+2qJFnn22Z5gKwBOwgXviux4UC7K+/j13AnZfPICi/g==", + "requires": { + "hast-util-to-html": "^7.1.1" + } + }, + "space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" + }, + "stringify-entities": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", + "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", + "requires": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" + } + } + }, + "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==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "micromark": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.10.tgz", + "integrity": "sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg==", + "requires": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "micromark-core-commonmark": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz", + "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==", + "requires": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "micromark-extension-gfm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.1.tgz", + "integrity": "sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==", + "requires": { + "micromark-extension-gfm-autolink-literal": "^1.0.0", + "micromark-extension-gfm-footnote": "^1.0.0", + "micromark-extension-gfm-strikethrough": "^1.0.0", + "micromark-extension-gfm-table": "^1.0.0", + "micromark-extension-gfm-tagfilter": "^1.0.0", + "micromark-extension-gfm-task-list-item": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-extension-gfm-autolink-literal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.3.tgz", + "integrity": "sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "micromark-extension-gfm-footnote": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.4.tgz", + "integrity": "sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==", + "requires": { + "micromark-core-commonmark": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "micromark-extension-gfm-strikethrough": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.4.tgz", + "integrity": "sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==", + "requires": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "micromark-extension-gfm-table": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.5.tgz", + "integrity": "sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==", + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "micromark-extension-gfm-tagfilter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.1.tgz", + "integrity": "sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==", + "requires": { + "micromark-util-types": "^1.0.0" + } + }, + "micromark-extension-gfm-task-list-item": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.3.tgz", + "integrity": "sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==", + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "micromark-extension-mdx-expression": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.3.tgz", + "integrity": "sha512-TjYtjEMszWze51NJCZmhv7MEBcgYRgb3tJeMAJ+HQCAaZHHRBaDCccqQzGizR/H4ODefP44wRTgOn2vE5I6nZA==", + "requires": { + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "micromark-extension-mdx-jsx": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.3.tgz", + "integrity": "sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==", + "requires": { + "@types/acorn": "^4.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" + } + }, + "micromark-extension-mdx-md": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.0.tgz", + "integrity": "sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==", + "requires": { + "micromark-util-types": "^1.0.0" + } + }, + "micromark-extension-mdxjs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.0.tgz", + "integrity": "sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==", + "requires": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^1.0.0", + "micromark-extension-mdx-jsx": "^1.0.0", + "micromark-extension-mdx-md": "^1.0.0", + "micromark-extension-mdxjs-esm": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-extension-mdxjs-esm": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.3.tgz", + "integrity": "sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==", + "requires": { + "micromark-core-commonmark": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.1.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" + } + }, + "micromark-factory-destination": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", + "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-factory-label": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz", + "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "micromark-factory-mdx-expression": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.6.tgz", + "integrity": "sha512-WRQIc78FV7KrCfjsEf/sETopbYjElh3xAmNpLkd1ODPqxEngP42eVRGbiPEQWpRV27LzqW+XVTvQAMIIRLPnNA==", + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" + } + }, + "micromark-factory-space": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", + "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-factory-title": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz", + "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==", + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "micromark-factory-whitespace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz", + "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==", + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", + "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", + "requires": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-chunked": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", + "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", + "requires": { + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-classify-character": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz", + "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-combine-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz", + "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==", + "requires": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-decode-numeric-character-reference": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz", + "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==", + "requires": { + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-decode-string": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz", + "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==", + "requires": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-encode": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz", + "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==" + }, + "micromark-util-events-to-acorn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.1.0.tgz", + "integrity": "sha512-hB8HzidNt/Us5q2BvqXj8eeEm0U9rRfnZxcA9T65JRUMAY4MbfJRAFm7m9fXMAdSHJiVPmajsp8/rp6/FlHL8A==", + "requires": { + "@types/acorn": "^4.0.0", + "@types/estree": "^0.0.51", + "estree-util-visit": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-location": "^4.0.0", + "vfile-message": "^3.0.0" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "requires": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" + } + } + } + }, + "micromark-util-html-tag-name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz", + "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==" + }, + "micromark-util-normalize-identifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", + "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", + "requires": { + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-resolve-all": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz", + "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==", + "requires": { + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-sanitize-uri": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz", + "integrity": "sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-subtokenize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz", + "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==", + "requires": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "micromark-util-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz", + "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==" + }, + "micromark-util-types": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz", + "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "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==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "mysql2": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz", + "integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==", + "requires": { + "denque": "^2.0.1", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^4.0.0", + "lru-cache": "^6.0.0", + "named-placeholders": "^1.1.2", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + } + }, + "named-placeholders": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", + "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", + "requires": { + "lru-cache": "^4.1.3" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + } + } + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "peer": true + }, + "next": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/next/-/next-12.2.0.tgz", + "integrity": "sha512-B4j7D3SHYopLYx6/Ark0fenwIar9tEaZZFAaxmKjgcMMexhVJzB3jt7X+6wcdXPPMeUD6r09weUtnDpjox/vIA==", + "requires": { + "@next/env": "12.2.0", + "@next/swc-android-arm-eabi": "12.2.0", + "@next/swc-android-arm64": "12.2.0", + "@next/swc-darwin-arm64": "12.2.0", + "@next/swc-darwin-x64": "12.2.0", + "@next/swc-freebsd-x64": "12.2.0", + "@next/swc-linux-arm-gnueabihf": "12.2.0", + "@next/swc-linux-arm64-gnu": "12.2.0", + "@next/swc-linux-arm64-musl": "12.2.0", + "@next/swc-linux-x64-gnu": "12.2.0", + "@next/swc-linux-x64-musl": "12.2.0", + "@next/swc-win32-arm64-msvc": "12.2.0", + "@next/swc-win32-ia32-msvc": "12.2.0", + "@next/swc-win32-x64-msvc": "12.2.0", + "@swc/helpers": "0.4.2", + "caniuse-lite": "^1.0.30001332", + "postcss": "8.4.5", + "styled-jsx": "5.0.2", + "use-sync-external-store": "1.1.0" + }, + "dependencies": { + "postcss": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", + "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", + "requires": { + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" + } + } + } + }, + "next-mdx-remote": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/next-mdx-remote/-/next-mdx-remote-4.0.3.tgz", + "integrity": "sha512-jKpZyBN0cOUmfBRId5iGpplWOO79hV2A5qfo17VG4Avn0G5PEs6vR9vf9IngKEw1G4aVqzhCs3j9CEbMFzZoAg==", + "requires": { + "@mdx-js/mdx": "^2.0.0", + "@mdx-js/react": "^2.0.0", + "vfile": "^5.3.0", + "vfile-matter": "^3.0.1" + } + }, + "next-themes": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.2.0.tgz", + "integrity": "sha512-myhpDL4vadBD9YDSHiewqvzorGzB03N84e+3LxCwHRlM/hiBOaW+UsKsQojQAzC7fdcJA0l2ppveXcYaVV+hxQ==", + "requires": {} + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node-releases": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.fromentries": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.hasown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", + "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", + "dev": true, + "requires": { + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "dependencies": { + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" + } + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse-numeric-range": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-0.0.2.tgz", + "integrity": "sha512-m6xRZuda9v6EGdnPMIkcyB3/NpdgbMJG8yPAQ0Mwm1nGlm2OE/o6YS0EAxAqv6u4/PKQPp6BNoylZnRb2U2/OA==" + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "periscopic": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.0.4.tgz", + "integrity": "sha512-SFx68DxCv0Iyo6APZuw/AKewkkThGwssmU0QWtTlvov3VAtPX+QJ4CadwSaz8nrT5jPIuxdvJWB4PnD2KNDxQg==", + "requires": { + "estree-walker": "^3.0.0", + "is-reference": "^3.0.0" + } + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + }, + "pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "requires": { + "camelcase-css": "^2.0.1" + } + }, + "postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "dependencies": { + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + } + } + }, + "postcss-nested": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "requires": { + "postcss-selector-parser": "^6.0.6" + } + }, + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, + "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, + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "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 + } + } + }, + "prismjs": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.23.0.tgz", + "integrity": "sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA==", + "requires": { + "clipboard": "^2.0.0" + } + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + } + } + }, + "property-information": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.1.1.tgz", + "integrity": "sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w==" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "peer": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "react-confirm-alert": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/react-confirm-alert/-/react-confirm-alert-3.0.2.tgz", + "integrity": "sha512-4yjYlhURDc1P6c/9A20C0w4EHx9kik9kHjjgmuIGD0F5sSQcmSstU1qwPrkFL3gJaMKWunckEtTw/7cARW3ZFg==", + "requires": {} + }, + "react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "requires": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + } + }, + "react-hook-form": { + "version": "7.33.1", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.33.1.tgz", + "integrity": "sha512-ydTfTxEJdvgjCZBj5DDXRc58oTEfnFupEwwTAQ9FSKzykEJkX+3CiAkGtAMiZG7IPWHuzgT6AOBfogiKhUvKgg==", + "requires": {} + }, + "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 + }, + "react-redux": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.2.tgz", + "integrity": "sha512-nBwiscMw3NoP59NFCXFf02f8xdo+vSHT/uZ1ldDwF7XaTpzm+Phk97VT4urYBl5TYAPNVaFm12UHAEyzkpNzRA==", + "requires": { + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" + }, + "dependencies": { + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + } + } + }, + "react-toastify": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-9.0.5.tgz", + "integrity": "sha512-dszPCeQINY+Nm6HmsiAXT/7wsazPqv0S/RuhIYLAW+fTKcd3T1iRjZG0XqrN9nvAzqaE5J6uxMaiBrOevxjY8g==", + "requires": { + "clsx": "^1.1.1" + } + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "requires": { + "pify": "^2.3.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "redux": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", + "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", + "requires": { + "@babel/runtime": "^7.9.2" + } + }, + "redux-thunk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz", + "integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==", + "requires": {} + }, + "refractor": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.3.0.tgz", + "integrity": "sha512-c/jEhQjk1NDyTF3hMgtu8PigaqkWUv+c5+mBffZCTnjyrNSJkG+0eoTOJV/u0XCTuPfaFzJyj6MM4HnF0Wr27Q==", + "requires": { + "hastscript": "^6.0.0", + "parse-entities": "^2.0.0", + "prismjs": "~1.23.0" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "rehype": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-12.0.1.tgz", + "integrity": "sha512-ey6kAqwLM3X6QnMDILJthGvG1m1ULROS9NT4uG9IDCuv08SFyLlreSuvOa//DgEvbXx62DS6elGVqusWhRUbgw==", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "rehype-parse": "^8.0.0", + "rehype-stringify": "^9.0.0", + "unified": "^10.0.0" + }, + "dependencies": { + "@types/parse5": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", + "dev": true + }, + "bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "dev": true + }, + "hast-util-from-parse5": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.0.tgz", + "integrity": "sha512-m8yhANIAccpU4K6+121KpPP55sSl9/samzQSQGpb0mTExcNh2WlvjtMwSWFhg6uqD4Rr6Nfa8N6TMypQM51rzQ==", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "@types/parse5": "^6.0.0", + "@types/unist": "^2.0.0", + "hastscript": "^7.0.0", + "property-information": "^6.0.0", + "vfile": "^5.0.0", + "vfile-location": "^4.0.0", + "web-namespaces": "^2.0.0" + } + }, + "hast-util-parse-selector": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.0.tgz", + "integrity": "sha512-AyjlI2pTAZEOeu7GeBPZhROx0RHBnydkQIXlhnFzDi0qfXTmGUWoCYZtomHbrdrheV4VFUlPcfJ6LMF5T6sQzg==", + "dev": true, + "requires": { + "@types/hast": "^2.0.0" + } + }, + "hastscript": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.0.2.tgz", + "integrity": "sha512-uA8ooUY4ipaBvKcMuPehTAB/YfFLSSzCwFSwT6ltJbocFUKH/GDHLN+tflq7lSRf9H86uOuxOFkh1KgIy3Gg2g==", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^3.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" + } + }, + "is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true + }, + "rehype-parse": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-8.0.4.tgz", + "integrity": "sha512-MJJKONunHjoTh4kc3dsM1v3C9kGrrxvA3U8PxZlP2SjH8RNUSrb+lF7Y0KVaUDnGH2QZ5vAn7ulkiajM9ifuqg==", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^7.0.0", + "parse5": "^6.0.0", + "unified": "^10.0.0" + } + }, + "trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "dev": true + }, + "unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + } + }, + "vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" + } + }, + "web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "dev": true + } + } + }, + "rehype-autolink-headings": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/rehype-autolink-headings/-/rehype-autolink-headings-6.1.1.tgz", + "integrity": "sha512-NMYzZIsHM3sA14nC5rAFuUPIOfg+DFmf9EY1YMhaNlB7+3kK/ZlE6kqPfuxr1tsJ1XWkTrMtMoyHosU70d35mA==", + "requires": { + "@types/hast": "^2.0.0", + "extend": "^3.0.0", + "hast-util-has-property": "^2.0.0", + "hast-util-heading-rank": "^2.0.0", + "hast-util-is-element": "^2.0.0", + "unified": "^10.0.0", + "unist-util-visit": "^4.0.0" + }, + "dependencies": { + "bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" + }, + "is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" + }, + "trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==" + }, + "unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "requires": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + } + }, + "unist-util-visit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", + "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", + "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } + } + } + }, + "rehype-parse": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-7.0.1.tgz", + "integrity": "sha512-fOiR9a9xH+Le19i4fGzIEowAbwG7idy2Jzs4mOrFWBSJ0sNUgy0ev871dwWnbOo371SjgjG4pwzrbgSVrKxecw==", + "requires": { + "hast-util-from-parse5": "^6.0.0", + "parse5": "^6.0.0" + } + }, + "rehype-slug": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-5.0.1.tgz", + "integrity": "sha512-X5v3wV/meuOX9NFcGhJvUpEjIvQl2gDvjg3z40RVprYFt7q3th4qMmYLULiu3gXvbNX1ppx+oaa6JyY1W67pTA==", + "requires": { + "@types/hast": "^2.0.0", + "github-slugger": "^1.1.1", + "hast-util-has-property": "^2.0.0", + "hast-util-heading-rank": "^2.0.0", + "hast-util-to-string": "^2.0.0", + "unified": "^10.0.0", + "unist-util-visit": "^4.0.0" + }, + "dependencies": { + "bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" + }, + "hast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-2.0.0.tgz", + "integrity": "sha512-02AQ3vLhuH3FisaMM+i/9sm4OXGSq1UhOOCpTLLQtHdL3tZt7qil69r8M8iDkZYyC0HCFylcYoP+8IO7ddta1A==", + "requires": { + "@types/hast": "^2.0.0" + } + }, + "is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" + }, + "trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==" + }, + "unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "requires": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + } + }, + "unist-util-visit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", + "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", + "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } + } + } + }, + "rehype-stringify": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.3.tgz", + "integrity": "sha512-kWiZ1bgyWlgOxpqD5HnxShKAdXtb2IUljn3hQAhySeak6IOQPPt6DeGnsIh4ixm7yKJWzm8TXFuC/lPfcWHJqw==", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "hast-util-to-html": "^8.0.0", + "unified": "^10.0.0" + }, + "dependencies": { + "bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "dev": true + }, + "is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true + }, + "trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "dev": true + }, + "unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + } + } + } + }, + "remark-code-titles": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/remark-code-titles/-/remark-code-titles-0.1.2.tgz", + "integrity": "sha512-KsHQbaI4FX8Ozxqk7YErxwmBiveUqloKuVqyPG2YPLHojpgomodWgRfG4B+bOtmn/5bfJ8khw4rR0lvgVFl2Uw==", + "requires": { + "unist-util-visit": "^1.4.0" + } + }, + "remark-gfm": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", + "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==", + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-gfm": "^2.0.0", + "micromark-extension-gfm": "^2.0.0", + "unified": "^10.0.0" + }, + "dependencies": { + "bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" + }, + "is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" + }, + "trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==" + }, + "unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "requires": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + } + } + } + }, + "remark-mdx": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.1.2.tgz", + "integrity": "sha512-npQagPdczPAv0xN9F8GSi5hJfAe/z6nBjylyfOfjLOmz086ahWrIjlk4BulRfNhA+asutqWxyuT3DFVsxiTVHA==", + "requires": { + "mdast-util-mdx": "^2.0.0", + "micromark-extension-mdxjs": "^1.0.0" + } + }, + "remark-parse": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", + "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==", + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "unified": "^10.0.0" + }, + "dependencies": { + "bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" + }, + "is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" + }, + "trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==" + }, + "unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "requires": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + } + } + } + }, + "remark-rehype": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz", + "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==", + "requires": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-to-hast": "^12.1.0", + "unified": "^10.0.0" + }, + "dependencies": { + "bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" + }, + "is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" + }, + "trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==" + }, + "unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "requires": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + } + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "reselect": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.6.tgz", + "integrity": "sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==" + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "requires": { + "mri": "^1.1.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "peer": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "requires": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + } + }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==", + "optional": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "peer": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", + "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", + "dev": true + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "space-separated-tokens": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz", + "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==" + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==" + }, + "stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true + }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "string.prototype.matchall": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", + "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.1", + "side-channel": "^1.0.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "stringify-entities": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", + "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", + "requires": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "dependencies": { + "character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==" + } + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==" + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "requires": { + "inline-style-parser": "0.1.1" + } + }, + "styled-jsx": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.2.tgz", + "integrity": "sha512-LqPQrbBh3egD57NBcHET4qcgshPks+yblyhPlH2GY8oaDgKs8SK4C3dBh3oSJjgzJ3G5t1SYEZGHkP+QEpX9EQ==", + "requires": {} + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "tailwindcss": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.4.tgz", + "integrity": "sha512-NrxbFV4tYsga/hpWbRyUfIaBrNMXDxx5BsHgBS4v5tlyjf+sDsgBg5m9OxjrXIqAS/uR9kicxLKP+bEHI7BSeQ==", + "requires": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.14", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.0" + }, + "dependencies": { + "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==" + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "requires": { + "is-glob": "^4.0.3" + } + } + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "peer": true + }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } + }, + "terser": { + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.1.tgz", + "integrity": "sha512-+ahUAE+iheqBTDxXhTisdA8hgvbEG1hHOQ9xmNjeUJSoi6DU/gMrKNcfZjHkyY6Alnuyc+ikYJaxxfHkT3+WuQ==", + "peer": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "peer": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "peer": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz", + "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==", + "peer": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.7", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.7.2" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "peer": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "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 + }, + "throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "optional": true + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" + }, + "tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + } + } + }, + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "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 + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + }, + "typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "dependencies": { + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "requires": { + "@types/unist": "^2.0.2" + } + }, + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + } + } + }, + "unist-builder": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.0.tgz", + "integrity": "sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ==", + "requires": { + "@types/unist": "^2.0.0" + } + }, + "unist-util-generated": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.0.tgz", + "integrity": "sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==" + }, + "unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + }, + "unist-util-position": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz", + "integrity": "sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==", + "requires": { + "@types/unist": "^2.0.0" + } + }, + "unist-util-position-from-estree": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.1.tgz", + "integrity": "sha512-xtoY50b5+7IH8tFbkw64gisG9tMSpxDjhX9TmaJJae/XuxQ9R/Kc8Nv1eOsf43Gt4KV/LkriMy9mptDr7XLcaw==", + "requires": { + "@types/unist": "^2.0.0" + } + }, + "unist-util-remove-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.1.tgz", + "integrity": "sha512-0yDkppiIhDlPrfHELgB+NLQD5mfjup3a8UYclHruTJWmY74je8g+CIFr79x5f6AkmzSwlvKLbs63hC0meOMowQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "dependencies": { + "unist-util-visit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", + "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + } + }, + "unist-util-visit-parents": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", + "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } + } + } + }, + "unist-util-stringify-position": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", + "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", + "requires": { + "@types/unist": "^2.0.0" + } + }, + "unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "requires": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "requires": { + "unist-util-is": "^3.0.0" + }, + "dependencies": { + "unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==" + } + } + }, + "update-browserslist-db": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", + "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "use-sync-external-store": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.1.0.tgz", + "integrity": "sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ==", + "requires": {} + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "uvu": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.4.tgz", + "integrity": "sha512-x1CyUjcP9VKaNPhjeB3FIc/jqgLsz2Q9LFhRzUTu/jnaaHILEGNuE0XckQonl8ISLcwyk9I2EZvWlYsQnwxqvQ==", + "requires": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + }, + "dependencies": { + "kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==" + } + } + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + } + }, + "vfile": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.4.tgz", + "integrity": "sha512-KI+7cnst03KbEyN1+JE504zF5bJBZa+J+CrevLeyIMq0aPU681I2rQ5p4PlnQ6exFtWiUrg26QUdFMnAKR6PIw==", + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + } + }, + "vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" + }, + "vfile-matter": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile-matter/-/vfile-matter-3.0.1.tgz", + "integrity": "sha512-CAAIDwnh6ZdtrqAuxdElUqQRQDQgbbIrYtDYI8gCjXS1qQ+1XdLoK8FIZWxJwn0/I+BkSSZpar3SOgjemQz4fg==", + "requires": { + "@types/js-yaml": "^4.0.0", + "is-buffer": "^2.0.0", + "js-yaml": "^4.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + } + } + }, + "vfile-message": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz", + "integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + } + }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "peer": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" + }, + "webpack": { + "version": "5.73.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.73.0.tgz", + "integrity": "sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA==", + "peer": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.9.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "peer": true + } + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "peer": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "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, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "write-file-atomic": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", + "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yaml": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", + "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", + "dev": true + }, + "yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, + "yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "dev": true + }, + "zwitch": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", + "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..bfb4be9 --- /dev/null +++ b/package.json @@ -0,0 +1,78 @@ +{ + "name": "nextjs-typescript-mdx-blog", + "author": "@huntarosan", + "license": "MIT", + "version": "1.0.0", + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "type-check": "tsc --pretty --noEmit", + "format": "prettier --write .", + "lint": "eslint . --ext ts --ext tsx --ext js", + "test": "jest", + "test-all": "yarn lint && yarn type-check && yarn test" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged", + "pre-push": "yarn run type-check" + } + }, + "lint-staged": { + "*.@(ts|tsx)": [ + "yarn lint", + "yarn format" + ] + }, + "dependencies": { + "@headlessui/react": "^1.6.5", + "@heroicons/react": "^1.0.6", + "@next/mdx": "^12.2.0", + "@reduxjs/toolkit": "^1.8.3", + "@tailwindcss/typography": "^0.5.2", + "axios": "^0.27.2", + "date-fns": "^2.28.0", + "gray-matter": "^4.0.3", + "mdx-prism": "^0.3.4", + "mysql2": "^2.3.3", + "next": "^12.2.0", + "next-mdx-remote": "^4.0.3", + "next-themes": "^0.2.0", + "react": "^18.2.0", + "react-confirm-alert": "^3.0.2", + "react-dom": "^18.2.0", + "react-hook-form": "^7.33.1", + "react-redux": "^8.0.2", + "react-toastify": "^9.0.5", + "rehype-autolink-headings": "^6.1.1", + "rehype-slug": "^5.0.1", + "remark-code-titles": "^0.1.2", + "remark-gfm": "^3.0.1" + }, + "devDependencies": { + "@testing-library/react": "^13.3.0", + "@types/jest": "^28.1.4", + "@types/mysql2": "github:types/mysql2", + "@types/node": "^18.0.0", + "@types/react": "^18.0.14", + "@typescript-eslint/eslint-plugin": "^5.30.3", + "@typescript-eslint/parser": "^5.30.3", + "autoprefixer": "^10.4.7", + "babel-jest": "^28.1.2", + "eslint": "^8.19.0", + "eslint-config-next": "^12.2.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-react": "^7.30.1", + "husky": "^8.0.1", + "identity-obj-proxy": "^3.0.0", + "jest": "^28.1.2", + "jest-watch-typeahead": "^1.1.0", + "lint-staged": "^13.0.3", + "postcss": "^8.4.14", + "prettier": "^2.7.1", + "rehype": "^12.0.1", + "tailwindcss": "^3.1.4", + "typescript": "^4.7.4" + } +} diff --git a/pages/_app.tsx b/pages/_app.tsx new file mode 100644 index 0000000..2805d3d --- /dev/null +++ b/pages/_app.tsx @@ -0,0 +1,18 @@ +import { ThemeProvider } from 'next-themes'; +import type { AppProps } from 'next/app'; +import React from 'react'; +import { Provider } from 'react-redux'; +import '../styles/globals.css'; +import { store } from '../redux/store'; + +const MyApp = ({ Component, pageProps }: AppProps): JSX.Element => { + return ( + + + + + + ); +}; + +export default MyApp; diff --git a/pages/_document.tsx b/pages/_document.tsx new file mode 100644 index 0000000..4c33755 --- /dev/null +++ b/pages/_document.tsx @@ -0,0 +1,17 @@ +import Document, { Head, Html, Main, NextScript } from 'next/document'; + +class MyDocument extends Document { + render(): JSX.Element { + return ( + + + +
+ + + + ); + } +} + +export default MyDocument; diff --git a/pages/about.tsx b/pages/about.tsx new file mode 100644 index 0000000..d8eaabf --- /dev/null +++ b/pages/about.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import Layout from '../components/Layout'; + +export const About = (): JSX.Element => { + return ( + +

РоботТоп

+

Мы команда школы 103

+
+ ); +}; + +export default About; diff --git a/pages/api/loadingLegisteredCommands.ts b/pages/api/loadingLegisteredCommands.ts new file mode 100644 index 0000000..7334297 --- /dev/null +++ b/pages/api/loadingLegisteredCommands.ts @@ -0,0 +1,10 @@ +import Select from "../../server/db/select"; + +const sql = "SELECT team_name, training_institution_team, name_team_coach, name_first_participant, name_second_participant, name_third_party, concat(first_partial_class,',',second_class,',',third_part_class) as classTeam FROM members WHERE 1"; + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export default function handler(req, res) { + Select(sql, function(data){ + res.status(200).json(data); + }) +} \ No newline at end of file diff --git a/pages/api/registration.ts b/pages/api/registration.ts new file mode 100644 index 0000000..1669c32 --- /dev/null +++ b/pages/api/registration.ts @@ -0,0 +1,19 @@ +import type { NextApiRequest, NextApiResponse } from 'next' +import Insert from "../../server/db/insert"; + +const sql = "INSERT INTO members (name_team_coach, coach_telefon_number, trainer_mail, city_team, training_institution_team, team_name, name_first_participant, first_partial_class, name_second_participant, second_class, name_third_party, third_part_class) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; +type Data = { + error: string, + } + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export default function handler( + req: NextApiRequest, + res: NextApiResponse + ) { + const re = /\s*,\s*/; + const parm = req.body; + Insert(sql, parm.split(re), function(data){ + res.status(200).json(data); + }) + } \ No newline at end of file diff --git a/pages/index.tsx b/pages/index.tsx new file mode 100644 index 0000000..21618ae --- /dev/null +++ b/pages/index.tsx @@ -0,0 +1,64 @@ +import { format, parseISO } from 'date-fns'; +import { GetStaticProps } from 'next'; +import Link from 'next/link'; +import React from 'react'; +import Layout from '../components/Layout'; +import { getAllPosts } from '../lib/api'; +import { PostType } from '../types/post'; + +type IndexProps = { + posts: PostType[]; +}; + +export const Index = ({ posts }: IndexProps): JSX.Element => { + return ( + +

Робототехнический фестиваль RobotTop

+

РоботТОП – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+
    +
  • Любая робототехническая платформа
  • +
  • Команда от 2 до 3 человек
  • +
  • 11 возрастных групп
  • +
  • Свобода в творчестве
  • +
+ + + Регистрация команды + + + + {posts.map((post) => ( + + ))} +
+ ); +}; + +export const getStaticProps: GetStaticProps = async () => { + const posts = getAllPosts(['date', 'description', 'slug', 'title']); + + return { + props: { posts }, + }; +}; + +export default Index; diff --git a/pages/posts/[slug].tsx b/pages/posts/[slug].tsx new file mode 100644 index 0000000..211c939 --- /dev/null +++ b/pages/posts/[slug].tsx @@ -0,0 +1,96 @@ +import { format, parseISO } from 'date-fns'; +import fs from 'fs'; +import matter from 'gray-matter'; +import mdxPrism from 'mdx-prism'; +import { GetStaticPaths, GetStaticProps } from 'next'; +import { serialize } from 'next-mdx-remote/serialize'; +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'; +import Head from 'next/head'; +import Image from 'next/image'; +import Link from 'next/link'; +import path from 'path'; +import React from 'react'; +import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeSlug from 'rehype-slug'; +import Layout, { WEBSITE_HOST_URL } from '../../components/Layout'; +import { MetaProps } from '../../types/layout'; +import { PostType } from '../../types/post'; +import { postFilePaths, POSTS_PATH } from '../../utils/mdxUtils'; + +// Custom components/renderers to pass to MDX. +// Since the MDX files aren't loaded by webpack, they have no knowledge of how +// to handle import statements. Instead, you must include components in scope +// here. +const components = { + Head, + Image, + Link, +}; + +type PostPageProps = { + source: MDXRemoteSerializeResult; + frontMatter: PostType; +}; + +const PostPage = ({ source, frontMatter }: PostPageProps): JSX.Element => { + const customMeta: MetaProps = { + title: `${frontMatter.title} - RoboTop`, + description: frontMatter.description, + image: `${WEBSITE_HOST_URL}${frontMatter.image}`, + date: frontMatter.date, + type: 'article', + }; + return ( + +
+

+ {frontMatter.title} +

+

+ {format(parseISO(frontMatter.date), 'MMMM dd, yyyy')} +

+
+ +
+
+
+ ); +}; + +export const getStaticProps: GetStaticProps = async ({ params }) => { + const postFilePath = path.join(POSTS_PATH, `${params.slug}.mdx`); + const source = fs.readFileSync(postFilePath); + + const { content, data } = matter(source); + + const mdxSource = await serialize(content, { + // Optionally pass remark/rehype plugins + mdxOptions: { + remarkPlugins: [require('remark-code-titles')], + rehypePlugins: [mdxPrism, rehypeSlug, rehypeAutolinkHeadings], + }, + scope: data, + }); + + return { + props: { + source: mdxSource, + frontMatter: data, + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const paths = postFilePaths + // Remove file extensions for page paths + .map((path) => path.replace(/\.mdx?$/, '')) + // Map the path into the static paths object required by Next.js + .map((slug) => ({ params: { slug } })); + + return { + paths, + fallback: false, + }; +}; + +export default PostPage; diff --git a/pages/registration.tsx b/pages/registration.tsx new file mode 100644 index 0000000..3c94809 --- /dev/null +++ b/pages/registration.tsx @@ -0,0 +1,66 @@ +import React, {useEffect, useState} from 'react'; +import Layout from '../components/Layout'; +import RegistrationForm from '../components/RegistrationForm'; +import LoadingTeamsForm from '../components/LoadingTeamsForm'; +import { useSelector } from 'react-redux'; +import { useAppDispatch } from '../redux/store'; +import { fetchUser, selectUserData } from '../redux/user'; +import { ToastContainer, toast } from 'react-toastify'; +import 'react-toastify/dist/ReactToastify.css'; + +export const Registration = (): JSX.Element => { + const dispatch = useAppDispatch(); + const [UserAdd, setUserAdd] = useState(0); + + const UpdateUser = () => { + setUserAdd(UserAdd+1); + toast("Спасибо Ваша команда зарегистрирована"); + } + useEffect(() => { + dispatch( fetchUser() ); + }, [UserAdd]); + + const { user_items, user_status } = useSelector(selectUserData); + const User = user_items.map((obj, index) => ); + return ( + + + +
+
+

Зарегистрированные команды

+
+ + + + + + + + + + + + { User } + +
+ Название команды + + ФИО тренера + + Учебное заведение + + ФИО участников + + Возрастная группа +
+
+
+ ); +}; + +export default Registration; diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..3687d28 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,8 @@ +// If you want to use other PostCSS plugins, see the following: +// https://tailwindcss.com/docs/using-with-preprocessors +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/posts/festival-schedule.mdx b/posts/festival-schedule.mdx new file mode 100644 index 0000000..f694284 --- /dev/null +++ b/posts/festival-schedule.mdx @@ -0,0 +1,69 @@ +--- +title: Расписание фестиваля +description: Расписаине фестиваля по дням +date: '2021-06-01' +--- + +## Расписаие фестиваля РобоТоп + +**!!Примерное расписание фестиваля!!** + +### Понедельник - Заезды возрастных групп 1, 2 классы + + 08:00 - 11:00 - Заезд и регистрация команд, отладка роботов + + 11:00 - 11:45 - Открытие фесиваля + + 11:45 - 12:30 - Обед + + 13:00 - 14:00 - Клафикационные заезды + + 14:00 - 15:00 - Заеды 1/16 + + 15:00 - 16:00 - Заеды 1/8 + + 16:00 - 16:30 - Заеды 1/4 + + 16:30 - 17:00 - Заеды 1/2 + + 17:30 - 18:30 - Ужин + + 18:30 - 19:00 - Награждение первого дня + +### Вторник - Заезды возрастных групп 3, 4 классы + + 08:00 - 11:00 - Заезд и регистрация команд, отладка роботов + + 11:00 - 11:45 - Открытие фесиваля + + 11:45 - 12:30 - Обед + + 13:00 - 14:00 - Клафикационные заезды + + 14:00 - 15:00 - Заеды 1/16 + + 15:00 - 16:00 - Заеды 1/8 + + 16:00 - 16:30 - Заеды 1/4 + + 16:30 - 17:00 - Заеды 1/2 + + 17:30 - 18:30 - Ужин + + 18:30 - 19:00 - Награждение второго дня + +### Среда - Заезды возрастных групп 5, 6 классы + + 08:00 - 11:00 - Заезд и регистрация команд, отладка роботов + + 11:00 - 11:45 - Открытие фесиваля + + 11:45 - 12:30 - Обед + + 13:00 - 14:00 - Клафикационные заезды + + 14:00 - 15:00 - Заеды 1/16 + + 15:00 - 16:00 - Заеды 1/8 + + 16:00 - 16:30 - Заеды 1/4 + + 16:30 - 17:00 - Заеды 1/2 + + 17:30 - 18:30 - Ужин + + 18:30 - 19:00 - Награждение третьего дня + +### Четверг - Заезды возрастных групп 7, 8 классы + + 08:00 - 11:00 - Заезд и регистрация команд, отладка роботов + + 11:00 - 11:45 - Открытие фесиваля + + 11:45 - 12:30 - Обед + + 13:00 - 14:00 - Клафикационные заезды + + 14:00 - 15:00 - Заеды 1/16 + + 15:00 - 16:00 - Заеды 1/8 + + 16:00 - 16:30 - Заеды 1/4 + + 16:30 - 17:00 - Заеды 1/2 + + 17:30 - 18:30 - Ужин + + 18:30 - 19:00 - Награждение четвертого дня + +### Пятница - Заезды возрастных групп 9, 10, 11 классы + + 08:00 - 11:00 - Заезд и регистрация команд, отладка роботов + + 11:00 - 11:45 - Открытие фесиваля + + 11:45 - 12:30 - Обед + + 13:00 - 14:00 - Клафикационные заезды + + 14:00 - 15:00 - Заеды 1/16 + + 15:00 - 16:00 - Заеды 1/8 + + 16:00 - 16:30 - Заеды 1/4 + + 16:30 - 17:00 - Заеды 1/2 + + 17:30 - 18:30 - Ужин + + 18:30 - 19:00 - Награждение пятого дня \ No newline at end of file diff --git a/posts/regulations.mdx b/posts/regulations.mdx new file mode 100644 index 0000000..5f038e3 --- /dev/null +++ b/posts/regulations.mdx @@ -0,0 +1,515 @@ +--- +title: Правила соревнований роботов +description: Правила молодежных соревнований роботов. РоботТОП Junior 2022 +date: '2022-06-01' +image: '/images/robottop.png' +--- + +{`Правила + +## 1. ИДЕЯ СОРЕВНОВАНИЙ + +

**РоботТОП** – это робототехнические соревнования, в которых могут принять участие молодые любители робототехники, объединившись в команды.

+

**Участники команд** – школьники – молодые исследователи, которые участвуют в соревнованиях в рамках учебного проекта, как группа друзей или независимый клуб.

+

**Возрастные группы** участников разделяются по их классу учебны на данный момент времени. (Класс ученика подтверждаться документом).

+

РоботТОП - преследуют одну и ту же цель: дать возможность молодым людям активно обучаться и на практике применять полученные знания и умения в дружеском соревновании. Возрастное ограничение для участия в РоботТОП – 18 лет, или последний класс школы. Каждая команда может иметь руководителя, на которого возрастное ограничение не распространяется. Команды, которые не соблюдают это возрастное ограничение, не будут допущены к участию в соревнованиях.

+

+ **Команда** – это группа молодых людей, создавшая одного робота для соревнований. **Максимальное количество человек в команде не может быть больше трех**. Отдельный человек может быть участником лишь одной команды, даже если обе команды принадлежат к одной организации, при этом, обмен опытом всячески приветствуется. На руководителя проекта (учитель, один из родителей, лидер группы, и т. п.) возрастные ограничения не распространяются, но робот должен быть полностью разработан и построен членами команды. Если в команде присутствуют участники из разных классов, то команда принимает участие в заездах в группе согласно самому старшему участнику в команде. +

+

+ **Роботы**, использующие в конструкции коммерчески приобретенное шасси или основу, могут быть недопущены к соревнованиям. +

+

+ Одна организация (клуб, школа и т. п.) может зарегистрировать несколько команд, только если это допускается регистрационными требованиями. Принятие подобных требований является обязательным для участников соревнований. +

+

+ В том случае, если робот был представлен, построен или изменен наставником в одиночку, организаторы могут дисквалифицировать или не допустить участие команды в соревнованиях. Участники должны быть способны описать и объяснить процесс создания робота. Строго запрещается изменение робота наставником во время соревнования, но он может руководить и давать советы. +

+

+ Предполагается, что соревнования РоботТОП проходят в атмосфере дружбы, честной игры и спортивного духа. Как и в спорте, судейские решения являются окончательными, за исключением случаев, когда достигнуты соглашения между всеми вовлеченными сторонами. +Робототехнические соревнования – это публичные мероприятия. Мы настоятельно просим команды уважать правила приличия и безопасности (электрическая, уровень звука, общие правила, и т.п.). Эти правила относятся ко всем участникам, людям которые пришли их поддержать, а так же ко всему оборудованию. +

+ + +## 2. ТЕМА СОРЕВНОВАНИЙ +

+ После многих лет изучения мира и Вселенной наши друзья – роботы – решили исследовать свое прошлое. В 2022 году роботы отправятся на поиски руин древней роботизированной цивилизации, чтобы найти забытые фрагменты своего происхождения. +

+

+ Наших опытных археологов ожидают раскопки, спрятанные сокровища и священные статуи, и ничто не остановит их на пути к восстановлению своего прошлого. Так что доставайте лопаты и кирки, ведь нас ждут приключения! +

+ + +### Миссиями роботов будут: +* Сохранение и экспонирование статуэтки. +* Возвращение в лагерь в конце дня. +* Оценка своей работы. + +{`Рисунок +Рисунок 1 - Общий вид игрового поля + +## 3. ИГРОВОЕ ПОЛЕ И ИСПЫТАНИЯ +### 3.1 ВАЖНАЯ ИНФОРМАЦИЯ + +

+ Организаторы соревнований стремятся изготовить Игровую Зону как можно точнее и ближе к эталону. Тем не менее они вправе внести некоторые изменения, если сочтут их необходимыми. Жалобы, связанные с отклонениями размеров, не рассматриваются. Имейте в виду, что качество поверхностей разных игровых полей может отличаться, также оно может ухудшаться в ходе соревнований по естественным причинам. +

+ +### 3.2 ИГРОВОЕ ПОЛЕ +

+ Полигон представляет собой горизонтальную прямоугольную поверхность размером 1200х2400 мм с бортиками высотой 70мм на каждой стороне. +

+{`Рисунок +Рисунок 2 - Общий вид игрового поля. +

+Полная спецификация полигона и игровых элементов (размеры, расположение перед началом состязания, цвета и пр.) представлена в Приложении. +

+### 3.3 СТАРТОВЫЕ ЗОНЫ +#### 3.3.4 Описание +

+У каждой команды есть своя стартовая зона для роботов. Это прямоугольная поверхность отделенная границей полоской цвета команды (граница включена в стартовую зону). +

+{`Рисунок +Рисунок 3 - Стартовые зоны +

+ **(a)** Желтая стартовая зона **(b)** Фиолетовая стартовая зона +

+### 3.4 Ограничения +

+ До старта, вертикальная проекция роботов не должна выходить за пределы стартовой зоны. Убедитесь, что ваши роботы полностью помещаются в стартовую зону. Робот может нависать над бортиком, но не выходить за пределы Игрового Поля. +Цветные линии включены в стартовую зону. Во время всего матча роботам запрещается находиться в стартовой зоне другой команды. +

+ +## 4 ОПИСАНИЕ И РАСПОЛОЖЕНИЕ ИГРОВЫХ ЭЛЕМЕНТОВ +### 4.1 СОХРАНЕНИЕ И ВЫСТАВЛЕНИЕ СТАТУЭТКИ +

+Статуэтка, удивительное сокровище истории, была найдена предыдущей экспедицией. Чтобы сохранить ее, роботы должны защитить ее от внешних воздействий, выставить в выставочном зале и поменять ее местами с копией на оригинальном месте. +

+#### 4.1.1 Описание и расположение игровых элементов +

+ Для этого действия используются статуэтка, реплика, постамент и витрина. +

+#### 4.1.2 Действия и ограничения +**Действия:** +

+ * За время подготовки команда должна поставить свою статуэтку на пьедестал. + * Во время подготовки команда должна предварительно поместить реплику в своего робота. + * Во время матча робот должны забрать статуэтку с пьедестала. + * После того как статуэтка будет взята, роботы должны поместить ее на витрину. + * Роботы должны поставить реплику на пьедестал вместо статуэтки. +

+**Ограничения:** +

+ * Реплику и статуэтку нельзя складывать в стопку. + * Реплика считается стоящей на пьедестале только в том случае, если она находится на постаменте в конце матча. + * Реплика представляет собой куб со стороной 60 мм. + * Статуэтка считается стоящей в витрине, если весь ее объем входит в габариты витрины. + * Статуэтка не может самостоятельно перемещаться ни внутри витрины, ни на игровой площадке. + * Статуэтка, построенная командой, имеет следующие ограничения по размерам: + + Она должна помещаться в кубе со стороной 120 мм. + + Она должна быть больше, чем куб со стороной 60 мм. + + Вес статуэтки не должен превышать 600 г. + * Статуэтка может быть оснащена электроникой. В этом случае она должна иметь кнопку аварийной остановки. + * Допускается использование простого тумблера в качестве кнопки аварийной остановки. Кнопка должна быть видна и доступна судьям в любое время. + * Статуэтка, все еще находящаяся под контролем робота в конце матча, не будет засчитана. + * Реплика, находящаяся под контролем робота в конце матча, не засчитывается. +

+#### 4.1.3 Баллы +

+ * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если реплика находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +

+{`Рисунок +Рисунок 4 - Перемещение статуэтки и реплики + +### 4.2 ВИТРИНА +#### 4.2.1 Описание и расположение игровых элементов +

Для этого действия используются витрина и статуэтка.

+#### 4.2.2 Действия и ограничения +**Действия:** +

+ * Команда должна установить свою витрину в выставочном зале во время подготовки. + * Витрина будет активирована во время матча путем размещения в ней статуэтки. Цель - выделить статуэтку хотя бы одним светящимся элементом. +

+**Ограничения:** +

+ * Активация витрины должна быть произведена в момент размещения статуэтки. Активация может осуществляться любым способом, в том числе беспроводным. + * Витрина должна иметь как минимум один светящийся элемент, активируемый установленной статуэткой. Этот элемент должен быть виден публике, но не должен никого ослеплять. Этот светящийся элемент может находиться внутри статуэтки, в этом случае электропитание должно обеспечиваться от витрины. + * Витрина считается активированной, если она явно изменила свою форму или внешний вид по сравнению с началом матча. + * Вертикальная проекция витрины не должна пересекать границы выставочного зала в любое время. + * Витрина имеет следующие ограничения по размерам (статуэтка включена): + + Максимальная глубина: 222 мм. + + Максимальная ширина: 450 мм. + + Максимальная высота: 430 мм. + + Вес витрины не должен превышать 3 кг. + * После окончания матча, активированный источник света должен продолжать работать. + * Витрина может содержать источник электрического питания. В этом случае должна присутствовать кнопка аварийной остановки, которая непосредственно выключает витрину. Кнопка аварийной остановки имеет те же характеристики, что и кнопка аварийной остановки робота. Выключатель должен быть видимым, легко доступным и находиться на одной высоте. До начала матча витрина может быть включена в сеть без активации. + * Допускается подача питания на витрину, подключив ее к источнику питания панели управления, но ни при каких обстоятельствах витрина не может быть активирована панелью управления робота. Соединительные кабели не учитываются в ограничениях по размерам. + * Это действие не должно быть опасным для публики, людей вокруг стола, игровой площадки или роботов. + * Витрина не может быть активирована внешним элементом (командой, пультом дистанционного управления, ...). +

+#### 4.2.3 Баллы +

+ * 2 балла за установку витрины во время подготовки; + * 5 дополнительных баллов, если витрина активирована; +

+### 4.3 ВОЗВРАЩЕНИЕ В ЛАГЕРЬ +#### 4.3.1 Описание и расположение игровых элементов + * Для этого действия используются лагер. +#### 4.3.1 Действия и ограничения +**Действия:** +

* После окончания матча робот должен быть остановлен в собственном лагере.

+**Ограничения:** +

+ * Чтобы считаться действительным, вертикальная проекция робота должна хотя бы частично находиться в пределах лагеря. +

+#### 4.3.2 Баллы +

+ * 20 баллов, если робот команды находятся в одной из зон лагере; +

+ +## 5 ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ +### 5.1 Описание и расположение игровых элементов +

+ * Устройство для отображения подсчета очков во время матча должно быть сделано командой: + * Оно может быть статичным (лист бумаги, грифельная доска и т.д.). Или динамическим (электронный дисплей); расположенным либо на роботе, либо на витрине (пожалуйста, убедитесь, что витрина активирована). +

+### 5.2 Действия и ограничения +

+ * Команда должна оценить количество очков, набранных в матче ее роботом. Для этого возможны два исключающих варианта: + + Предматчевая оценка на статическом дисплее: команда пишет счет, который она намерена сделать во время матча. + + Оценка во время матча на динамическом устройстве отображения. + * Область дисплея и его ориентация для чтения должны быть легко различимы и идентифицируемы судьями. + * Предполагаемый счет является целым числом и должен быть выражен в десятичной системе счисления. + * В случае динамических дисплеев оценочный счет должен отображаться и после окончания матча. + * Ни при каких обстоятельствах счет не должен меняться после окончания матча, иначе бонус будет аннулирован! +

+### 5.3 Баллы +

+ Оценка основывается на всех предыдущих действиях. Бонус считается по следующей формуле: Бонус = 0.3 x Баллы – Разница. + * Баллы – набранные во время матча баллы за обычные задания. + * Разница – математическая разница между предсказанными очками и набранными (модуль разности). • Бонус – целое число (округленное вверх). + * Бонус прибавляется к баллам команды. + * Отрицательный бонус округляется до 0. + * Нулевое число баллов не может приносить бонуса. +

+ +## 6 ПРЕЗЕНТАЦИЯ ПРОЕКТА +

+ Соревнования РоботТОП призывают учиться играя. Одной из основных целей организаторов является помощь проектам команд в течение года для успешного выступления на соревнованиях. С этой целью мы просим вас, провести предварительные работы и оформить техническое описание проекта и технический плакат. +

+ +

+ Мы ожидаем увидеть привлекательных, инновационных роботов, которые соответствуют техническим ограничениям и правилам этого издания. Будучи творческим и оригинальным, вы повысите ценность своих усилий, а также производительность вашего робота во время матчей. Сделав эту презентацию, вы увеличите коммуникационную ценность своего проекта и визуальную привлекательность ваших роботов, как для публики, приходящей на событие, так и для вашего собственного удовлетворения. Создав что-то эстетическое и функциональное, укрепит ваше рабочее отношение даже соревнований. +

+**ТЕХНИЧЕСКИЙ ПЛАКАТ** +

+ На соревнованиях каждая команда обязана предоставить организаторам технический плакат. Этот плакат должен содержать информацию о конструкции робота (чертежи, технические данные, конструкционные особенности и т. п.). Плакат рекомендуется напечатать на листе формата А1 (594х841 мм). Демонстрационный технический плакат направлен на развитие взаимодействия и обмена опытом между командами непосредственно на соревнованиях. +

+

+ Необходимо постараться, чтобы плакат был понятен широкой аудитории, не знакомой с техникой. Для облегчения восприятия предпочтительно использовать рисунки и диаграммы. Плакат, помимо прочего, должен содержать: + * Название команды; + * Имена членов команды +Технический плакат обычно размещается на стенде команды. +

+ +## 7 РОБОТ +### 7.1 ОБЩИЕ ПОЛОЖЕНИЯ +

+ Во время соревнований только двум членам команды разрешен доступ к зоне ожидания матча и к Игровой Зоне. На пути к Игровой Зоне могут встречаться ступеньки или лестницы, поэтому рекомендуется делать вспомогательное оборудование удобным для переноски. +

+

+ Роботы должны быть сделаны из хорошо соединенных частей – части Роботов не должны отделяться и оставаться на Игровом Поле во время матча. Исключением в этом случае являются подобранные Игровые Элементы. +

+

+Роботы не должны прикреплять себя к игровому полю (например, используя вакуумные присоски). Каждая команда должна разработать уникальный и оригинальный набор роботов. Поэтому не разрешается проектировать роботов, которые в значительной степени аналогичны роботам других команд (например, идентичные колесные базы или исполнительные механизмы). В случае сомнений обращайтесь в судейский комитет. Используйте воображение и творите! Устройте развлекательное шоу для зрителей и СМИ, ваш робот может выражать эмоции, воспроизводить звуки или играть музыку. +

+## 8 РАЗМЕРЫ +### 8.1 Размеры робота: +

+Размеры роботов и всех элементов, созданных командами, строго ограничены. Настоятельно рекомендуется включать допуски. +Периметр робота - это периметр выпуклой оболочки его вертикальной проекции на поверхность. Измеряется он, как показано на рисунках ниже: +

+{`Рисунок +Рисунок 5 - Размеры робота +

+Периметр робота не должен превышать 1200 мм во время старта. Периметр полностью развернутого робота не должен превышать 1300 мм во время матча. Разрешается изменять форму выпуклой оболочки во время игры, если ее периметр всегда учитывает ограничение максимального периметра. +

+

+В любой момент, во время матча, высота каждого робота не должна превышать 350 мм. Кнопка Аварийной остановки может быть расположена на высоте 375 мм. +Когда робот манипулирует объектом, высота этого объекта не может превышать 350 мм +

+ +## 9 ИСТОЧНИКИ ЭНЕРГИИ +

+ Разрешены любые источники энергии, встроенные в робота и другие разработанные системы (аккумуляторы, сжатый воздух, энергия гравитации…), за исключением источников энергии, использующих химические реакции, такие как горение или взрыв, которые запрещены из соображений безопасности. Кроме того, запрещено использование живых существ, коррозионных составов и расплескивание жидкостей. +

+

+ Если у вас есть сомнения в отношении необычного источника энергии, лучше заранее посоветуйтесь с судейским комитетом, предоставляя соответствующую техническую документацию. +

+

+ Для предотвращения возгорания рекомендуется обращать особое внимание на выбор проводников в зависимости от проходящего через них тока. Кроме того, рекомендуется защитить систему питания, установив предохранитель как можно ближе к аккумулятору. + Аккумулятор: + * Разрешено использовать только немодифицированные батареи. + * Роботы должны быть в состоянии участвовать в трёх матчах подряд. Обратите внимание, что это время, помимо прочего, включает период ожидания, во время которого робот включен и ожидает старта. +

+

+ Командам настоятельно рекомендуется приготовить несколько наборов аккумуляторов и обеспечить легкий доступ к ним для проведения замены в случае необходимости. Всегда держите наготове набор полностью заряженных аккумуляторов. +

+

+Особое внимание к аккумуляторам на основе Лития. Литиевые батареи известны своей нестабильностью и могут легко воспламениться, если не будут приняты определенные меры предосторожности. Использование батарей на основе Лития (например, Li-ion / Li-Po / Li-Fe) разрешается при соблюдении следующих условий: +* Подходящее, выпущенное промышленным способом, зарядное устройство, которое должно быть предоставлено на этапе допуска к соревнованиям. +* Батареи постоянно хранятся в специальном сертифицированном огнеупорном контейнере (например, огнестойком мешке), как во время соревнований, так и в боксах участников, а также во время транспортировки робота! +* Настоятельно рекомендуется снабжать робота системой обнаружения разряда батарей • Данные ограничения снимаются только в случае: + + Батарей Lego™ Mindstorms / ноутбука / мобильного телефона и только до тех пор пока они не вынуты из "родного" устройства и они используются по назначению, которое определил производитель. + + Lithium-Iron батарей (LifePo4); +Источник питания, передаваемый роботу, может быть только электрическим. Максимально допустимое напряжение составляет 13,8 В (измеряется между любыми двумя проводами кабеля и робота). Этот источник напряжения не предоставляется организаторами. С другой стороны, команды имеют доступ к стандарту (стандарт 230 В 50 Гц) и могут использовать батареи. +Клеммы кабелей должны быть изолированы. +

+ +## 10 ДИЗАЙН И НЕОБХОДИМОЕ ОБОРУДОВАНИЕ +

+Видимость: На одной из сторон робота должна быть оставлена прямоугольная площадка 100мм x 70мм. По возможности, данная область должна быть видна с наивысшей точки игрового поля. Она так же должна быть визуально доступной на протяжении большей части матча. Команды могут получить наклейки, предназначенные для размещения в этой области. +

+

+Командам настоятельно рекомендуется делать механизмы внутри робота видимыми для зрителей и других участников. Это создает атмосферу обучения и передачи знаний, необходимую для того, чтобы понять принцип действия роботов. +

+**Стартовый шнур робота:** +

+ В начале матча робот должен быть запущен так называемым «Стартовым Устройством». Оно должно приводиться в действие выдергиванием шнура длиной как минимум 500 мм. После запуска шнур не должен оставаться прикрепленным к роботу. Любые другие системы запуска (например, пульт дистанционного управления, ручной тумблер, отжатие кнопки аварийного выключения и т. п.) не будут одобрены. +

+

+ Кнопка аварийного выключения Автономного робота У Автономных роботов, использующих батареи для питания, должна быть кнопка аварийного выключения красного цвета и диаметром как минимум 20 мм. Ее следует разместить в верхней части робота, в безопасном месте, легко доступном для судей в любой момент матча. Допускается, чтобы Кнопка Аварийного Выключения в поднятом состоянии превышала высоту робота на 25 мм. +

+

+ Активация кнопки должна происходить от простого поступательного движения вниз (например, нажатие ладонью). Сразу после активации Кнопки Аварийного Выключения должна прекратиться работа всех приводов робота, оставляя их в свободном состоянии (т. е. НЕ в состоянии активного торможения – обесточенными). +**При проектировании роботов рекомендуется учитывать возможные неровности игровых площадок.** +

+ + +## 11 СИСТЕМА УПРАВЛЕНИЯ ДЛЯ АВТОНОМНОГО +

+Команды могут использовать любой тип системы управления для робота (аналоговый, микропроцессорный, микроконтроллер, встроенный компьютер, программируемая логика и т. д.). **Эти системы должны быть полностью интегрированы в робота.** +Система управления должна позволять роботу играть при любом цвете(расположении на поле), предоставленных командам. В идеале, он должен быть настроен незадолго до оглашения цвета команды. +

+ +## 12 БЕЗОПАСНОСТЬ +## 12.1 Общие положения +

+ Все системы должны соответствовать существующим национальным стандартам. В частности, используемые системы должны соответствовать официальным нормам безопасности жизнедеятельности и быть безопасными для участников и зрителей во время и вне матчей (например, в боксах команды или в процессе ожидания/подготовки матча). У роботов не должно быть никаких опасных выступающих или острых частей. +

+

+ Строго запрещается использование жидких, едких и пиротехнических материалов или живых существ в роботе. Все роботы должны соответствовать официальным стандартам «низкого напряжения». То есть электрические напряжения, используемые в роботах или Маяках, не должны превышать 48v. Напряжения выше 48v могут быть использованы только внутри закрытых устройств, произведенных промышленным способом (таких, как лазеры, подсветка LCD панели), если эти устройства не были модифицированы, и если они соответствуют национальным нормативным требованиям. +

+

+ Как правило, любой механизм или система, признанная судьями как потенциально опасная, будет запрещена к применению и должна быть удалена из робота до соревнований, иначе команда будет дисквалифицирована с соревнований. +

+ +## 13 ПОДГОТОВКА К МАТЧУ +

+ Перед началом очередного матча у каждой команды есть 2 минуты, чтобы подготовить робота, а так же другое оборудование к игре на Поле. Команда, не подготовившая своего робота вовремя, будет дисквалифицирована. +

+

+ После завершения этапа подготовки роботов, судьи уточняют у участников их готовность. С этого момента командам запрещается прикасаться к роботам. Также с этого момента претензии относительно состояния Игровых Элементов или их расположения в Игровой Зоне, не принимаются к обсуждению. + **Если команда готова к матчу, этап подготовки можно сократить и начать матч по готовности команды!** +

+ +## 14 МАТЧ +

+ После короткого обратного отсчета судья подаст сигнал к запуску роботов. Во время матча ни при каких обстоятельствах не разрешается трогать роботов, Игровые Элементы или Игровое Поле (исключение представляет только особое указание судьи). Также не разрешается нажимать на Кнопку Аварийного Выключения! Любое воздействие на робота, Игровой Элемент или Игровое Поле без явного разрешения судьи может привести к дисквалификации команды с матча. **Продолжительность одно матча 100 секунд.** +

+

+ Любой объект, покинувший Игровое Поле во время матча, обратно возвращать запрещено. По истечении основного времени матча роботы должны прекратить всякое передвижение по полю и остановить все свои приводы. +

+

+ После окончания игры никто кроме судьи не имеет права трогать роботов и Игровые Элементы. Затем судьи должны подсчитать баллы и объявить результат матча (подробности подсчета см. следующий раздел). После этого команды могут забрать своих роботов из Игровой Зоны. Если команды с чем-то несогласны, то они могут спокойно изложить свои аргументы судьям. Роботы продолжают оставаться на своих местах до окончания спора. +

+

+ Помните, что только 2 члена команды должны находиться в Игровой Зоне! В итоге судья выносит окончательное решение. В случае, если найти решение в обсуждении не удается, судьи оставляют за собой решение о необходимости переигровки матча. +

+

+ Команда объявляется дисквалифицированной с матча, если ни один из роботов команды полностью не покинул стартовую площадку в течение матча, была нажата кнопка экстренной остановки или если судья вынес соответствующее решение по итогам матча. +

+**Нажатие кнопки экстренной остановки может привести к штрафу или дисквалификации с матча.** + +## 15 СИСТЕМА БАЛЛОВ +### 15.1 Выезд из лагеря: + * 5 баллов, если робот после старта самостоятельно покинул полностью стартовую зону; + * 15.1.1 Возвращение на место в лагерь: + + 20 баллов, если один робот команды находятся в лагере; +### 15.2 Сохранение и выставление статуэтки: + * 2 балла за установку статуэтки на пьедестал во время подготовки; + * 5 баллов, если статуэтка отсутствует на пьедестале в конце игры; + * 10 баллов, если статуэтка находится на пьедестале в конце игры; + * 15 баллов, если статуэтка находится в витрине в конце игры; +### 15.3 Витрина + + 2 балла за установку витрины во время подготовки; + + 5 дополнительных баллов, если витрина активирована во время игры; +### 15.4 Скорость выполнения задания + + 60 секунд минус время выполнения полного задания роботом = дополнительные баллы. (пример: 60 - 54 = 6 балов) +### 15.5 Оценка производительности +

+ Оценка основана на предыдущих действиях + **Бонус считается по следующей формуле: Бонус = 0.3 x Баллы - Разница** + + Баллы – набранные во время матча баллы за обычные задания. + + Разница – математическая разница между предсказанными очками и набранными (неотрицательна). • Бонус – целое число (округленное вверх). + + Бонус прибавляется к баллам команды + + Отрицательный бонус округляется до 0. + + Нулевое число баллов не может приносить бонуса. + + Бонус за «недисквалификацию» не учитывается в прогнозе + + Штрафы не учитываются в прогнозе +

+**ВНИМАНИЕ! Игровой Элемент, который удерживается роботом не приносит баллы. Проверка осуществляется путем передвижения шасси робота в естественной манере, если Элемент движется вместе с роботом – он не засчитывается.** + +### 15.6 Штрафы +

+ Штраф приводит к потере 20 баллов в счете команды в оштрафованном матче. Отрицательный счет округляется до 0. +

+

+ Штрафы предназначены для компенсации урона или созданных помех, которые являются следствием ЧП во время проведения матча. Штрафная ситуация рассматривается как несоблюдение правил: такая ситуация должна оставаться исключительной! В случае повторяющихся штрафов, судьи имеют право дисквалифицировать команду как с матча, так и с соревнований. +

+ +### 15.7 Бонусные баллы +

+ 1 бонусный балл присуждается команде, которая не была дисквалифицирована в ходе матча. +

+### 15.8 Случаи дисквалификации +

+ Баллы дисквалифицированной команды приравниваются к нулю. +

+ +## 16 СОРЕВНОВАНИЯ +### 16.1 ДОПУСК К СОРЕВНОВАНИЯМ +#### 16.1.1 СТАТИЧЕСКАЯ ПРОВЕРКА +

+ Перед тем, как выступать на Игровом Поле, роботы осматриваются судьей, который проверяет их на соответствие правилам. Роботы должны быть готовы к демонстрации всех своих возможных действий. +

+#### 16.1.2 ДИНАМИЧЕСКАЯ ПРОВЕРКА +

+ Роботы должны в течение 100 секунд продемонстрировать хотя бы одно действие, приносящее минимальное количество очков. Роботы проверяются на Игровом Поле. Также может быть проверено соответствие некоторым обязательным требованиям правил (например, наличие таймера). +

+#### 16.1.3 ЗНАЧИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В РОБОТЕ +

+ В случае значительных технических изменений (функциональных, структурных, размерных...), выполненных после прохождения этапа допуска к соревнованиям, необходимо сообщить о них судье. Судьи должны утвердить изменения и, если посчитают необходимым, могут назначить повторную проверку роботу, подвергшемуся доработке. +

+

+ Если организаторы считают, что робот был модифицирован, может потребоваться повторная гомологизация робота, что запрещает ему соревноваться до тех пор, пока не будет получен повторный допуск. +

+ +### 16.2 КВАЛИФИКАЦИОННЫЙ ТУР +

+ Квалификационный тур состоит из серии квалификационных (отборочных) раундов. Команды, допущенные до соревнований, могут принять участие в 3-х матчах (иногда в большем количестве матчей, если так решат организаторы). +

+

+ Для определения команд, прошедших в финальный тур, создается рейтинг на основе баллов, набранных во время квалификационных раундов. +

+

+ По завершении квалификационных раундов, в случае равенства набранных баллов у некоторых команд, они будут сравниваться по количеству набранных баллов без учета бонусных баллов. В случае, если команды по прежнему остаются в равном положении, судьи имеют право организовать дополнительные раунды для таких команд. В этом случае, пары команд, соревнующихся за одно место, будут набраны случайным образом, а победитель по результатам матчей отправится в финальный тур. +

+

+ В случае нечетного числа команд в группе, будет организован один дополнительный матч для команды, оказавшейся без пары, а соперник для нее будет выбран случайным образом из группы. +

+ +### 16.3 ФИНАЛЬНАЯ СТАДИЯ +

+ После квалификационных раундов первые 4, 8 или 16 команд (в зависимости от числа команд, прошедших процедуру допуска к соревнованиям) будут участвовать в финальном туре в соответствии с рис. ниже. +

+

+ Матчи финального тура играются «на вылет», организаторы в праве изменить систему проведения финальной стадии. +

+{`Рисунок +

+ В случае двойной дисквалификации, двойного поражения или ничьей, матч незамедлительно переигрывается; если результат повторной игры по-прежнему двойная дисквалификация, двойное поражение или ничья, победитель определяется в соответствии с очками, заработанными в течение квалификационных раундов. Матчи за первое место играются по системе «лучший из трёх». Команда подряд выигравшая 2 матча считается победителем. +

+

+ В этом случае будьте внимательны: команды должны позаботиться о том, чтобы их Автономным роботам хватило заряда батарей на все матчи до победы одной из команд! +

+ +## Приложение +### Выставочный зал + **Размеры:** + * Высота: 70 мм + * Ширина: 150 мм + * Длина: 400 мм + +{`Рисунок + +{`Рисунок +### Пьедестал: + **Размеры:** + * Высота: 90 мм + * Ширина: 150 мм + * Длина: 400 мм + +{`Рисунок + +{`Рисунок +На главную [Главная](/) \ No newline at end of file diff --git a/posts/task-completion-examples.mdx b/posts/task-completion-examples.mdx new file mode 100644 index 0000000..ae58931 --- /dev/null +++ b/posts/task-completion-examples.mdx @@ -0,0 +1,11 @@ +--- +title: Примеры выполнения задания +description: Видео по выполнения заданий и материалы по сборке и программирования робота +date: '2022-07-02' +--- + +Наданный момент мы подготавливаем материаол для публикации на сайте. +Весь материал будет опубликован до 1 сентября 2022 года. + + +На главную [Home](/) \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..4965832 Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/images/bridge.jpg b/public/images/bridge.jpg new file mode 100644 index 0000000..9735b04 Binary files /dev/null and b/public/images/bridge.jpg differ diff --git a/public/images/pedistal.jpg b/public/images/pedistal.jpg new file mode 100644 index 0000000..6baa9a5 Binary files /dev/null and b/public/images/pedistal.jpg differ diff --git a/public/images/pedistal2.jpg b/public/images/pedistal2.jpg new file mode 100644 index 0000000..a112845 Binary files /dev/null and b/public/images/pedistal2.jpg differ diff --git a/public/images/polegon.png b/public/images/polegon.png new file mode 100644 index 0000000..d1b842e Binary files /dev/null and b/public/images/polegon.png differ diff --git a/public/images/poligonBig.png b/public/images/poligonBig.png new file mode 100644 index 0000000..2753b1f Binary files /dev/null and b/public/images/poligonBig.png differ diff --git a/public/images/polrgonall_smal.png b/public/images/polrgonall_smal.png new file mode 100644 index 0000000..3e31a7f Binary files /dev/null and b/public/images/polrgonall_smal.png differ diff --git a/public/images/reiing.png b/public/images/reiing.png new file mode 100644 index 0000000..9e7dcca Binary files /dev/null and b/public/images/reiing.png differ diff --git a/public/images/robottop.png b/public/images/robottop.png new file mode 100644 index 0000000..b8eed40 Binary files /dev/null and b/public/images/robottop.png differ diff --git a/public/images/site-preview.png b/public/images/site-preview.png new file mode 100644 index 0000000..f98472b Binary files /dev/null and b/public/images/site-preview.png differ diff --git a/public/images/sizerobot.png b/public/images/sizerobot.png new file mode 100644 index 0000000..63bfc69 Binary files /dev/null and b/public/images/sizerobot.png differ diff --git a/public/images/vistZal.jpg b/public/images/vistZal.jpg new file mode 100644 index 0000000..89932cf Binary files /dev/null and b/public/images/vistZal.jpg differ diff --git a/public/images/vistzal2.jpg b/public/images/vistzal2.jpg new file mode 100644 index 0000000..466b7df Binary files /dev/null and b/public/images/vistzal2.jpg differ diff --git a/public/images/zadanie.png b/public/images/zadanie.png new file mode 100644 index 0000000..c7f0d56 Binary files /dev/null and b/public/images/zadanie.png differ diff --git a/public/vercel.svg b/public/vercel.svg new file mode 100644 index 0000000..fbf0e25 --- /dev/null +++ b/public/vercel.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/redux/store.ts b/redux/store.ts new file mode 100644 index 0000000..ba528cf --- /dev/null +++ b/redux/store.ts @@ -0,0 +1,15 @@ +import { configureStore } from '@reduxjs/toolkit'; +import userSlice from './user/slice'; + +import { useDispatch } from 'react-redux'; + +export const store = configureStore({ + reducer: {userSlice}, +}) + +export type RootState = ReturnType; + +type AppDispatch = typeof store.dispatch; + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export const useAppDispatch = () => useDispatch(); \ No newline at end of file diff --git a/redux/user/asyncActions.ts b/redux/user/asyncActions.ts new file mode 100644 index 0000000..54351ed --- /dev/null +++ b/redux/user/asyncActions.ts @@ -0,0 +1,13 @@ +import { createAsyncThunk } from '@reduxjs/toolkit'; +import axios from 'axios'; +import { User } from './types'; + +export const fetchUser = createAsyncThunk( + 'User/fetchUserStatus', + async () => { + const { data } = await axios.get(`/api/loadingLegisteredCommands`); + // eslint-disable-next-line no-console + console.log(data); + return data; + }, + ); \ No newline at end of file diff --git a/redux/user/index.ts b/redux/user/index.ts new file mode 100644 index 0000000..8b35dc7 --- /dev/null +++ b/redux/user/index.ts @@ -0,0 +1,4 @@ +export * from './selectors'; +export * from './asyncActions'; +export * from './slice'; +export * from './types'; \ No newline at end of file diff --git a/redux/user/selectors.ts b/redux/user/selectors.ts new file mode 100644 index 0000000..cb81ec3 --- /dev/null +++ b/redux/user/selectors.ts @@ -0,0 +1,4 @@ +import { RootState } from '../store'; + +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +export const selectUserData = (state: RootState) => state.userSlice; \ No newline at end of file diff --git a/redux/user/slice.ts b/redux/user/slice.ts new file mode 100644 index 0000000..615d895 --- /dev/null +++ b/redux/user/slice.ts @@ -0,0 +1,39 @@ +import { createSlice, PayloadAction } from '@reduxjs/toolkit'; +import { fetchUser } from './asyncActions'; +import { User, Status, UserSliceState } from './types'; + +const initialState: UserSliceState = { + user_items: [], + user_status: Status.LOADING, // loading | success | error +}; + +const userSlice = createSlice({ + name: 'categories', + initialState, + reducers: { + setUser(user_status, action: PayloadAction) { + user_status.user_items = action.payload; + }, + }, + + extraReducers: (builder) => { + builder.addCase(fetchUser.pending, (user_status) => { + user_status.user_status = Status.LOADING; + user_status.user_items = []; + }); + + builder.addCase(fetchUser.fulfilled, (user_status, action) => { + user_status.user_status = Status.SUCCESS; + user_status.user_items = action.payload; + }); + + builder.addCase(fetchUser.rejected, (user_status) => { + user_status.user_status = Status.ERROR; + user_status.user_items = []; + }); + }, +}); + +export const { setUser } = userSlice.actions; + +export default userSlice.reducer; \ No newline at end of file diff --git a/redux/user/types.ts b/redux/user/types.ts new file mode 100644 index 0000000..9be5052 --- /dev/null +++ b/redux/user/types.ts @@ -0,0 +1,21 @@ +export type User = { + team_name: string; + name_team_coach: string; + training_institution_team: string; + name_first_participant: string; + name_second_participant: string; + name_third_party: string; + classTeam: string[]; + + }; + + export enum Status { + LOADING = 'loading', + SUCCESS = 'completed', + ERROR = 'error', + } + + export interface UserSliceState { + user_items: User[]; + user_status: Status; + } \ No newline at end of file diff --git a/server/db/connect.ts b/server/db/connect.ts new file mode 100644 index 0000000..d7b48c7 --- /dev/null +++ b/server/db/connect.ts @@ -0,0 +1,13 @@ +import mysql from "mysql2"; + +const pool = mysql.createPool({ + host: process.env.HOST, + user: process.env.DATABASE, + database: process.env.DATABASE, + password: process.env.PASSWORD, + waitForConnections: true, + connectionLimit: 10, + queueLimit: 0 +}); + +module.exports = pool; \ No newline at end of file diff --git a/server/db/insert.ts b/server/db/insert.ts new file mode 100644 index 0000000..8d324d6 --- /dev/null +++ b/server/db/insert.ts @@ -0,0 +1,12 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); + +interface definitionInterface{ + (message:string):void; +} +export default function Insert(sql: string, argument: string[], callback: definitionInterface) { + pool.execute(sql, argument, (result) => { + callback(result); + pool.releaseConnection(pool); + }); +} \ No newline at end of file diff --git a/server/db/select.ts b/server/db/select.ts new file mode 100644 index 0000000..88935d1 --- /dev/null +++ b/server/db/select.ts @@ -0,0 +1,13 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +const pool = require("./connect"); +import {QueryError, RowDataPacket} from 'mysql2'; + +interface definitionInterface{ + (message:string):void; +} +export default function Select(sql: string, callback: definitionInterface) { + pool.query(sql, (err: QueryError, rows: RowDataPacket[]) => { + callback(rows); + pool.releaseConnection(pool); +}); +} \ No newline at end of file diff --git a/styles/globals.css b/styles/globals.css new file mode 100644 index 0000000..492d548 --- /dev/null +++ b/styles/globals.css @@ -0,0 +1,118 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + h1 { + @apply mb-6 text-3xl font-semibold; + } + h2 { + @apply text-2xl font-semibold; + } + p { + @apply mb-4; + } + a { + @apply text-blue-500 hover:text-blue-400 dark:text-blue-400 dark:hover:text-blue-300; + } +} + +/* Post styles */ +.prose { + max-width: 100vh; +} +.prose pre { + @apply bg-gray-50 border border-gray-200 dark:border-gray-700 dark:bg-gray-900; +} + +.prose code { + @apply text-gray-800 dark:text-gray-200 px-1 py-0.5 border border-gray-100 dark:border-gray-800 rounded-md bg-gray-100 dark:bg-gray-900; +} + +.prose img { + /* Don't apply styles to next/image */ + @apply m-0; +} + +/* Prism Styles */ +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + @apply text-gray-700 dark:text-gray-300; +} + +.token.punctuation { + @apply text-gray-700 dark:text-gray-300; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + @apply text-green-500; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + @apply text-purple-500; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + @apply text-yellow-500; +} + +.token.atrule, +.token.attr-value, +.token.keyword { + @apply text-blue-500; +} + +.token.function, +.token.class-name { + @apply text-pink-500; +} + +.token.regex, +.token.important, +.token.variable { + @apply text-yellow-500; +} + +code[class*='language-'], +pre[class*='language-'] { + @apply text-gray-800 dark:text-gray-50; +} + +pre::-webkit-scrollbar { + display: none; +} + +pre { + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ +} + +/* Remark Styles */ +.remark-code-title { + @apply text-gray-800 dark:text-gray-200 px-5 py-3 border border-b-0 border-gray-200 dark:border-gray-700 rounded-t bg-gray-200 dark:bg-gray-800 text-sm font-mono font-bold; +} + +.remark-code-title + pre { + @apply mt-0 rounded-t-none; +} + +.mdx-marker { + @apply block -mx-4 px-4 bg-gray-100 dark:bg-gray-800 border-l-4 border-blue-500; +} diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..09f03fa --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,75 @@ +const { spacing } = require('tailwindcss/defaultTheme'); + +module.exports = { + mode: 'jit', + purge: ['./pages/**/*.{js,ts,jsx,tsx}', './components/**/*.{js,ts,jsx,tsx}'], + darkMode: 'class', // or 'media' or 'class' + theme: { + extend: { + typography: (theme) => ({ + DEFAULT: { + css: { + color: theme('colors.gray.700'), + a: { + color: theme('colors.blue.500'), + '&:hover': { + color: theme('colors.blue.700'), + }, + code: { color: theme('colors.blue.400') }, + }, + 'h2,h3,h4': { + 'scroll-margin-top': spacing[32], + }, + code: { color: theme('colors.pink.500') }, + 'blockquote p:first-of-type::before': false, + 'blockquote p:last-of-type::after': false, + }, + }, + dark: { + css: { + color: theme('colors.gray.300'), + a: { + color: theme('colors.blue.400'), + '&:hover': { + color: theme('colors.blue.600'), + }, + code: { color: theme('colors.blue.400') }, + }, + blockquote: { + borderLeftColor: theme('colors.gray.700'), + color: theme('colors.gray.300'), + }, + 'h2,h3,h4': { + color: theme('colors.gray.100'), + 'scroll-margin-top': spacing[32], + }, + hr: { borderColor: theme('colors.gray.700') }, + ol: { + li: { + '&:before': { color: theme('colors.gray.500') }, + }, + }, + ul: { + li: { + '&:before': { backgroundColor: theme('colors.gray.500') }, + }, + }, + strong: { color: theme('colors.gray.300') }, + thead: { + color: theme('colors.gray.100'), + }, + tbody: { + tr: { + borderBottomColor: theme('colors.gray.700'), + }, + }, + }, + }, + }), + }, + }, + variants: { + typography: ['dark'], + }, + plugins: [require('@tailwindcss/typography')], +}; diff --git a/test/__mocks__/fileMock.js b/test/__mocks__/fileMock.js new file mode 100644 index 0000000..86059f3 --- /dev/null +++ b/test/__mocks__/fileMock.js @@ -0,0 +1 @@ +module.exports = 'test-file-stub'; diff --git a/test/pages/__snapshots__/index.test.tsx.snap b/test/pages/__snapshots__/index.test.tsx.snap new file mode 100644 index 0000000..a279bd0 --- /dev/null +++ b/test/pages/__snapshots__/index.test.tsx.snap @@ -0,0 +1,137 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Home page matches snapshot 1`] = ` + + + +`; diff --git a/test/testUtils.ts b/test/testUtils.ts new file mode 100644 index 0000000..c6d86b2 --- /dev/null +++ b/test/testUtils.ts @@ -0,0 +1,24 @@ +import { render } from '@testing-library/react'; +// import { ThemeProvider } from "my-ui-lib" +// import { TranslationProvider } from "my-i18n-lib" +// import defaultStrings from "i18n/en-x-default" + +const Providers = ({ children }) => { + return children; + // return ( + // + // + // {children} + // + // + // ) +}; + +const customRender = (ui, options = {}) => + render(ui, { wrapper: Providers, ...options }); + +// re-export everything +export * from '@testing-library/react'; + +// override render method +export { customRender as render }; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..3a8350a --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,33 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": false, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true + }, + "exclude": [ + "node_modules", + ".next", + "out" + ], + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + "**/*.js" + ] +} diff --git a/types/layout.ts b/types/layout.ts new file mode 100644 index 0000000..e23391a --- /dev/null +++ b/types/layout.ts @@ -0,0 +1,9 @@ +import { PostType } from './post'; + +export interface MetaProps + extends Pick { + /** + * For the meta tag `og:type` + */ + type?: string; +} diff --git a/types/post.ts b/types/post.ts new file mode 100644 index 0000000..db1eba6 --- /dev/null +++ b/types/post.ts @@ -0,0 +1,7 @@ +export type PostType = { + date?: string; + description?: string; + image?: string; + slug: string; + title: string; +}; diff --git a/utils/mdxUtils.ts b/utils/mdxUtils.ts new file mode 100644 index 0000000..28ca311 --- /dev/null +++ b/utils/mdxUtils.ts @@ -0,0 +1,11 @@ +import fs from 'fs'; +import path from 'path'; + +// POSTS_PATH is useful when you want to get the path to a specific file +export const POSTS_PATH = path.join(process.cwd(), 'posts'); + +// postFilePaths is the list of all mdx files inside the POSTS_PATH directory +export const postFilePaths = fs + .readdirSync(POSTS_PATH) + // Only include md(x) files + .filter((path) => /\.mdx?$/.test(path)); diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..555a1bc --- /dev/null +++ b/yarn.lock @@ -0,0 +1,6439 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.1.0": + "integrity" "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==" + "resolved" "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": + "integrity" "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==" + "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.18.6": + "integrity" "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ==" + "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.6.tgz" + "version" "7.18.6" + +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.8.0": + "integrity" "sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ==" + "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.6" + "@babel/helper-compilation-targets" "^7.18.6" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helpers" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@babel/types" "^7.18.6" + "convert-source-map" "^1.7.0" + "debug" "^4.1.0" + "gensync" "^1.0.0-beta.2" + "json5" "^2.2.1" + "semver" "^6.3.0" + +"@babel/generator@^7.18.6", "@babel/generator@^7.7.2": + "integrity" "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==" + "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz" + "version" "7.18.7" + dependencies: + "@babel/types" "^7.18.7" + "@jridgewell/gen-mapping" "^0.3.2" + "jsesc" "^2.5.1" + +"@babel/helper-compilation-targets@^7.18.6": + "integrity" "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==" + "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/compat-data" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "browserslist" "^4.20.2" + "semver" "^6.3.0" + +"@babel/helper-environment-visitor@^7.18.6": + "integrity" "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==" + "resolved" "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz" + "version" "7.18.6" + +"@babel/helper-function-name@^7.18.6": + "integrity" "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==" + "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.6" + +"@babel/helper-hoist-variables@^7.18.6": + "integrity" "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==" + "resolved" "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-imports@^7.18.6": + "integrity" "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.18.6": + "integrity" "sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@babel/types" "^7.18.6" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.8.0": + "integrity" "sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg==" + "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz" + "version" "7.18.6" + +"@babel/helper-simple-access@^7.18.6": + "integrity" "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==" + "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-split-export-declaration@^7.18.6": + "integrity" "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==" + "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-validator-identifier@^7.18.6": + "integrity" "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz" + "version" "7.18.6" + +"@babel/helper-validator-option@^7.18.6": + "integrity" "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" + "version" "7.18.6" + +"@babel/helpers@^7.18.6": + "integrity" "sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ==" + "resolved" "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@babel/types" "^7.18.6" + +"@babel/highlight@^7.18.6": + "integrity" "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==" + "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + "chalk" "^2.0.0" + "js-tokens" "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.6": + "integrity" "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==" + "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz" + "version" "7.18.6" + +"@babel/plugin-syntax-async-generators@^7.8.4": + "integrity" "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + "version" "7.8.4" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + "integrity" "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + "integrity" "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" + "version" "7.12.13" + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + "integrity" "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + "integrity" "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + "integrity" "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + "integrity" "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + "integrity" "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + "integrity" "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + "integrity" "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + "integrity" "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + "integrity" "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + "version" "7.14.5" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + "integrity" "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/runtime-corejs3@^7.10.2": + "integrity" "sha512-cOu5wH2JFBgMjje+a+fz2JNIWU4GzYpl05oSob3UDvBEh6EuIn+TXFHMmBbhSb+k/4HMzgKCQfEEDArAWNF9Cw==" + "resolved" "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "core-js-pure" "^3.20.2" + "regenerator-runtime" "^0.13.4" + +"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.9.2": + "integrity" "sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==" + "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "regenerator-runtime" "^0.13.4" + +"@babel/template@^7.18.6", "@babel/template@^7.3.3": + "integrity" "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==" + "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/types" "^7.18.6" + +"@babel/traverse@^7.18.6", "@babel/traverse@^7.7.2": + "integrity" "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==" + "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-function-name" "^7.18.6" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/types" "^7.18.6" + "debug" "^4.1.0" + "globals" "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.18.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + "integrity" "sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==" + "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz" + "version" "7.18.7" + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + "to-fast-properties" "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + "integrity" "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + "resolved" "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" + "version" "0.2.3" + +"@eslint/eslintrc@^1.3.0": + "integrity" "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==" + "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "ajv" "^6.12.4" + "debug" "^4.3.2" + "espree" "^9.3.2" + "globals" "^13.15.0" + "ignore" "^5.2.0" + "import-fresh" "^3.2.1" + "js-yaml" "^4.1.0" + "minimatch" "^3.1.2" + "strip-json-comments" "^3.1.1" + +"@headlessui/react@^1.6.5": + "integrity" "sha512-3VkKteDxlxf3fE0KbfO9t60KC1lM7YNpZggLpwzVNg1J/zwL+h+4N7MBlFDVpInZI3rKlZGpNx0PWsG/9c2vQg==" + "resolved" "https://registry.npmjs.org/@headlessui/react/-/react-1.6.5.tgz" + "version" "1.6.5" + +"@heroicons/react@^1.0.6": + "integrity" "sha512-JJCXydOFWMDpCP4q13iEplA503MQO3xLoZiKum+955ZCtHINWnx26CUxVxxFQu/uLb4LW3ge15ZpzIkXKkJ8oQ==" + "resolved" "https://registry.npmjs.org/@heroicons/react/-/react-1.0.6.tgz" + "version" "1.0.6" + +"@humanwhocodes/config-array@^0.9.2": + "integrity" "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz" + "version" "0.9.5" + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + "debug" "^4.1.1" + "minimatch" "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.1": + "integrity" "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + "version" "1.2.1" + +"@istanbuljs/load-nyc-config@^1.0.0": + "integrity" "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==" + "resolved" "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "camelcase" "^5.3.1" + "find-up" "^4.1.0" + "get-package-type" "^0.1.0" + "js-yaml" "^3.13.1" + "resolve-from" "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + "integrity" "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" + "resolved" "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" + "version" "0.1.3" + +"@jest/console@^28.1.1": + "integrity" "sha512-0RiUocPVFEm3WRMOStIHbRWllG6iW6E3/gUPnf4lkrVFyXIIDeCe+vlKeYyFOMhB2EPE6FLFCNADSOOQMaqvyA==" + "resolved" "https://registry.npmjs.org/@jest/console/-/console-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "@jest/types" "^28.1.1" + "@types/node" "*" + "chalk" "^4.0.0" + "jest-message-util" "^28.1.1" + "jest-util" "^28.1.1" + "slash" "^3.0.0" + +"@jest/core@^28.1.2": + "integrity" "sha512-Xo4E+Sb/nZODMGOPt2G3cMmCBqL4/W2Ijwr7/mrXlq4jdJwcFQ/9KrrJZT2adQRk2otVBXXOz1GRQ4Z5iOgvRQ==" + "resolved" "https://registry.npmjs.org/@jest/core/-/core-28.1.2.tgz" + "version" "28.1.2" + dependencies: + "@jest/console" "^28.1.1" + "@jest/reporters" "^28.1.2" + "@jest/test-result" "^28.1.1" + "@jest/transform" "^28.1.2" + "@jest/types" "^28.1.1" + "@types/node" "*" + "ansi-escapes" "^4.2.1" + "chalk" "^4.0.0" + "ci-info" "^3.2.0" + "exit" "^0.1.2" + "graceful-fs" "^4.2.9" + "jest-changed-files" "^28.0.2" + "jest-config" "^28.1.2" + "jest-haste-map" "^28.1.1" + "jest-message-util" "^28.1.1" + "jest-regex-util" "^28.0.2" + "jest-resolve" "^28.1.1" + "jest-resolve-dependencies" "^28.1.2" + "jest-runner" "^28.1.2" + "jest-runtime" "^28.1.2" + "jest-snapshot" "^28.1.2" + "jest-util" "^28.1.1" + "jest-validate" "^28.1.1" + "jest-watcher" "^28.1.1" + "micromatch" "^4.0.4" + "pretty-format" "^28.1.1" + "rimraf" "^3.0.0" + "slash" "^3.0.0" + "strip-ansi" "^6.0.0" + +"@jest/environment@^28.1.2": + "integrity" "sha512-I0CR1RUMmOzd0tRpz10oUfaChBWs+/Hrvn5xYhMEF/ZqrDaaeHwS8yDBqEWCrEnkH2g+WE/6g90oBv3nKpcm8Q==" + "resolved" "https://registry.npmjs.org/@jest/environment/-/environment-28.1.2.tgz" + "version" "28.1.2" + dependencies: + "@jest/fake-timers" "^28.1.2" + "@jest/types" "^28.1.1" + "@types/node" "*" + "jest-mock" "^28.1.1" + +"@jest/expect-utils@^28.1.1": + "integrity" "sha512-n/ghlvdhCdMI/hTcnn4qV57kQuV9OTsZzH1TTCVARANKhl6hXJqLKUkwX69ftMGpsbpt96SsDD8n8LD2d9+FRw==" + "resolved" "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "jest-get-type" "^28.0.2" + +"@jest/expect@^28.1.2": + "integrity" "sha512-HBzyZBeFBiOelNbBKN0pilWbbrGvwDUwAqMC46NVJmWm8AVkuE58NbG1s7DR4cxFt4U5cVLxofAoHxgvC5MyOw==" + "resolved" "https://registry.npmjs.org/@jest/expect/-/expect-28.1.2.tgz" + "version" "28.1.2" + dependencies: + "expect" "^28.1.1" + "jest-snapshot" "^28.1.2" + +"@jest/fake-timers@^28.1.2": + "integrity" "sha512-xSYEI7Y0D5FbZN2LsCUj/EKRR1zfQYmGuAUVh6xTqhx7V5JhjgMcK5Pa0iR6WIk0GXiHDe0Ke4A+yERKE9saqg==" + "resolved" "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.2.tgz" + "version" "28.1.2" + dependencies: + "@jest/types" "^28.1.1" + "@sinonjs/fake-timers" "^9.1.2" + "@types/node" "*" + "jest-message-util" "^28.1.1" + "jest-mock" "^28.1.1" + "jest-util" "^28.1.1" + +"@jest/globals@^28.1.2": + "integrity" "sha512-cz0lkJVDOtDaYhvT3Fv2U1B6FtBnV+OpEyJCzTHM1fdoTsU4QNLAt/H4RkiwEUU+dL4g/MFsoTuHeT2pvbo4Hg==" + "resolved" "https://registry.npmjs.org/@jest/globals/-/globals-28.1.2.tgz" + "version" "28.1.2" + dependencies: + "@jest/environment" "^28.1.2" + "@jest/expect" "^28.1.2" + "@jest/types" "^28.1.1" + +"@jest/reporters@^28.1.2": + "integrity" "sha512-/whGLhiwAqeCTmQEouSigUZJPVl7sW8V26EiboImL+UyXznnr1a03/YZ2BX8OlFw0n+Zlwu+EZAITZtaeRTxyA==" + "resolved" "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.2.tgz" + "version" "28.1.2" + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^28.1.1" + "@jest/test-result" "^28.1.1" + "@jest/transform" "^28.1.2" + "@jest/types" "^28.1.1" + "@jridgewell/trace-mapping" "^0.3.13" + "@types/node" "*" + "chalk" "^4.0.0" + "collect-v8-coverage" "^1.0.0" + "exit" "^0.1.2" + "glob" "^7.1.3" + "graceful-fs" "^4.2.9" + "istanbul-lib-coverage" "^3.0.0" + "istanbul-lib-instrument" "^5.1.0" + "istanbul-lib-report" "^3.0.0" + "istanbul-lib-source-maps" "^4.0.0" + "istanbul-reports" "^3.1.3" + "jest-message-util" "^28.1.1" + "jest-util" "^28.1.1" + "jest-worker" "^28.1.1" + "slash" "^3.0.0" + "string-length" "^4.0.1" + "strip-ansi" "^6.0.0" + "terminal-link" "^2.0.0" + "v8-to-istanbul" "^9.0.1" + +"@jest/schemas@^28.0.2": + "integrity" "sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==" + "resolved" "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz" + "version" "28.0.2" + dependencies: + "@sinclair/typebox" "^0.23.3" + +"@jest/source-map@^28.1.2": + "integrity" "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==" + "resolved" "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz" + "version" "28.1.2" + dependencies: + "@jridgewell/trace-mapping" "^0.3.13" + "callsites" "^3.0.0" + "graceful-fs" "^4.2.9" + +"@jest/test-result@^28.1.1": + "integrity" "sha512-hPmkugBktqL6rRzwWAtp1JtYT4VHwv8OQ+9lE5Gymj6dHzubI/oJHMUpPOt8NrdVWSrz9S7bHjJUmv2ggFoUNQ==" + "resolved" "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "@jest/console" "^28.1.1" + "@jest/types" "^28.1.1" + "@types/istanbul-lib-coverage" "^2.0.0" + "collect-v8-coverage" "^1.0.0" + +"@jest/test-sequencer@^28.1.1": + "integrity" "sha512-nuL+dNSVMcWB7OOtgb0EGH5AjO4UBCt68SLP08rwmC+iRhyuJWS9MtZ/MpipxFwKAlHFftbMsydXqWre8B0+XA==" + "resolved" "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "@jest/test-result" "^28.1.1" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^28.1.1" + "slash" "^3.0.0" + +"@jest/transform@^28.1.2": + "integrity" "sha512-3o+lKF6iweLeJFHBlMJysdaPbpoMmtbHEFsjzSv37HIq/wWt5ijTeO2Yf7MO5yyczCopD507cNwNLeX8Y/CuIg==" + "resolved" "https://registry.npmjs.org/@jest/transform/-/transform-28.1.2.tgz" + "version" "28.1.2" + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^28.1.1" + "@jridgewell/trace-mapping" "^0.3.13" + "babel-plugin-istanbul" "^6.1.1" + "chalk" "^4.0.0" + "convert-source-map" "^1.4.0" + "fast-json-stable-stringify" "^2.0.0" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^28.1.1" + "jest-regex-util" "^28.0.2" + "jest-util" "^28.1.1" + "micromatch" "^4.0.4" + "pirates" "^4.0.4" + "slash" "^3.0.0" + "write-file-atomic" "^4.0.1" + +"@jest/types@^28.1.1": + "integrity" "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==" + "resolved" "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "@jest/schemas" "^28.0.2" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + "chalk" "^4.0.0" + +"@jridgewell/gen-mapping@^0.1.0": + "integrity" "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==" + "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" + "version" "0.1.1" + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.0": + "integrity" "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==" + "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" + "version" "0.3.2" + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/gen-mapping@^0.3.2": + "integrity" "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==" + "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" + "version" "0.3.2" + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3": + "integrity" "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==" + "resolved" "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz" + "version" "3.0.8" + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + "integrity" "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + "resolved" "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" + "version" "1.1.2" + +"@jridgewell/source-map@^0.3.2": + "integrity" "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==" + "resolved" "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz" + "version" "0.3.2" + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@^1.4.10": + "integrity" "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "resolved" "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" + "version" "1.4.14" + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.7", "@jridgewell/trace-mapping@^0.3.9": + "integrity" "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==" + "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz" + "version" "0.3.14" + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@mdx-js/loader@>=0.15.0": + "integrity" "sha512-P7CWhrqE5rZ3ewBngZ9t/zQPbSq42iuty78K3zJ8Bl518qnOX1d106c+n7I/zHODPAmw9JfYMQdbv9WrrHa0DA==" + "resolved" "https://registry.npmjs.org/@mdx-js/loader/-/loader-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "@mdx-js/mdx" "^2.0.0" + "source-map" "^0.7.0" + +"@mdx-js/mdx@^2.0.0": + "integrity" "sha512-ASN1GUH0gXsgJ2UD/Td7FzJo1SwFkkQ5V1i9at5o/ROra7brkyMcBsotsOWJWRzmXZaLw2uXWn4aN8B3PMNFMA==" + "resolved" "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "@types/estree-jsx" "^0.0.1" + "@types/mdx" "^2.0.0" + "astring" "^1.6.0" + "estree-util-build-jsx" "^2.0.0" + "estree-util-is-identifier-name" "^2.0.0" + "estree-walker" "^3.0.0" + "hast-util-to-estree" "^2.0.0" + "markdown-extensions" "^1.0.0" + "periscopic" "^3.0.0" + "remark-mdx" "^2.0.0" + "remark-parse" "^10.0.0" + "remark-rehype" "^10.0.0" + "unified" "^10.0.0" + "unist-util-position-from-estree" "^1.0.0" + "unist-util-stringify-position" "^3.0.0" + "unist-util-visit" "^4.0.0" + "vfile" "^5.0.0" + +"@mdx-js/react@*", "@mdx-js/react@^2.0.0": + "integrity" "sha512-52e3DTJBrjsw3U51ZCdZ3N1IBaqnbzLIngCSXpKtiYiGr7PIqp3/P/+kym0MPTwBL/y9ZBmCieD8FyrXuEDrRw==" + "resolved" "https://registry.npmjs.org/@mdx-js/react/-/react-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "@types/mdx" "^2.0.0" + "@types/react" ">=16" + +"@next/env@12.2.0": + "integrity" "sha512-/FCkDpL/8SodJEXvx/DYNlOD5ijTtkozf4PPulYPtkPOJaMPpBSOkzmsta4fnrnbdH6eZjbwbiXFdr6gSQCV4w==" + "resolved" "https://registry.npmjs.org/@next/env/-/env-12.2.0.tgz" + "version" "12.2.0" + +"@next/eslint-plugin-next@12.2.0": + "integrity" "sha512-nIj5xV/z3dOfeBnE7qFAjUQZAi4pTlIMuusRM6s/T6lOz8x7mjY5s1ZkTUBmcjPVCb2VIv3CrMH0WZL6xfjZZg==" + "resolved" "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.2.0.tgz" + "version" "12.2.0" + dependencies: + "glob" "7.1.7" + +"@next/mdx@^12.2.0": + "integrity" "sha512-obWsgfD0/1+OOr4PMQlSal34uhIDxkFe9Db+LaFfRDbsmD8+gb0YevUOV5KBoleEHXfDku0WAPUUmPmDiAxu1w==" + "resolved" "https://registry.npmjs.org/@next/mdx/-/mdx-12.2.0.tgz" + "version" "12.2.0" + +"@next/swc-linux-x64-gnu@12.2.0": + "integrity" "sha512-MyhHbAKVjpn065WzRbqpLu2krj4kHLi6RITQdD1ee+uxq9r2yg5Qe02l24NxKW+1/lkmpusl4Y5Lks7rBiJn4w==" + "resolved" "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.0.tgz" + "version" "12.2.0" + +"@next/swc-linux-x64-musl@12.2.0": + "integrity" "sha512-Tz1tJZ5egE0S/UqCd5V6ZPJsdSzv/8aa7FkwFmIJ9neLS8/00za+OY5pq470iZQbPrkTwpKzmfTTIPRVD5iqDg==" + "resolved" "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.0.tgz" + "version" "12.2.0" + +"@nodelib/fs.scandir@2.1.5": + "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + "version" "2.1.5" + dependencies: + "@nodelib/fs.stat" "2.0.5" + "run-parallel" "^1.1.9" + +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + "version" "2.0.5" + +"@nodelib/fs.walk@^1.2.3": + "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + "version" "1.2.8" + dependencies: + "@nodelib/fs.scandir" "2.1.5" + "fastq" "^1.6.0" + +"@reduxjs/toolkit@^1.8.3": + "integrity" "sha512-lU/LDIfORmjBbyDLaqFN2JB9YmAT1BElET9y0ZszwhSBa5Ef3t6o5CrHupw5J1iOXwd+o92QfQZ8OJpwXvsssg==" + "resolved" "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.8.3.tgz" + "version" "1.8.3" + dependencies: + "immer" "^9.0.7" + "redux" "^4.1.2" + "redux-thunk" "^2.4.1" + "reselect" "^4.1.5" + +"@rushstack/eslint-patch@^1.1.3": + "integrity" "sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA==" + "resolved" "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz" + "version" "1.1.4" + +"@sinclair/typebox@^0.23.3": + "integrity" "sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg==" + "resolved" "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz" + "version" "0.23.5" + +"@sinonjs/commons@^1.7.0": + "integrity" "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==" + "resolved" "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz" + "version" "1.8.3" + dependencies: + "type-detect" "4.0.8" + +"@sinonjs/fake-timers@^9.1.2": + "integrity" "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==" + "resolved" "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz" + "version" "9.1.2" + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@swc/helpers@0.4.2": + "integrity" "sha512-556Az0VX7WR6UdoTn4htt/l3zPQ7bsQWK+HqdG4swV7beUCxo/BqmvbOpUkTIm/9ih86LIf1qsUnywNL3obGHw==" + "resolved" "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.2.tgz" + "version" "0.4.2" + dependencies: + "tslib" "^2.4.0" + +"@tailwindcss/typography@^0.5.2": + "integrity" "sha512-coq8DBABRPFcVhVIk6IbKyyHUt7YTEC/C992tatFB+yEx5WGBQrCgsSFjxHUr8AWXphWckadVJbominEduYBqw==" + "resolved" "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.2.tgz" + "version" "0.5.2" + dependencies: + "lodash.castarray" "^4.4.0" + "lodash.isplainobject" "^4.0.6" + "lodash.merge" "^4.6.2" + +"@testing-library/dom@^8.5.0": + "integrity" "sha512-m8FOdUo77iMTwVRCyzWcqxlEIk+GnopbrRI15a0EaLbpZSCinIVI4kSQzWhkShK83GogvEFJSsHF3Ws0z1vrqA==" + "resolved" "https://registry.npmjs.org/@testing-library/dom/-/dom-8.14.0.tgz" + "version" "8.14.0" + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^4.2.0" + "aria-query" "^5.0.0" + "chalk" "^4.1.0" + "dom-accessibility-api" "^0.5.9" + "lz-string" "^1.4.4" + "pretty-format" "^27.0.2" + +"@testing-library/react@^13.3.0": + "integrity" "sha512-DB79aA426+deFgGSjnf5grczDPiL4taK3hFaa+M5q7q20Kcve9eQottOG5kZ74KEr55v0tU2CQormSSDK87zYQ==" + "resolved" "https://registry.npmjs.org/@testing-library/react/-/react-13.3.0.tgz" + "version" "13.3.0" + dependencies: + "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^8.5.0" + "@types/react-dom" "^18.0.0" + +"@types/acorn@^4.0.0": + "integrity" "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==" + "resolved" "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz" + "version" "4.0.6" + dependencies: + "@types/estree" "*" + +"@types/aria-query@^4.2.0": + "integrity" "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==" + "resolved" "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz" + "version" "4.2.2" + +"@types/babel__core@^7.1.14": + "integrity" "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==" + "resolved" "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz" + "version" "7.1.19" + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + "integrity" "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==" + "resolved" "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz" + "version" "7.6.4" + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + "integrity" "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==" + "resolved" "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" + "version" "7.4.1" + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + "integrity" "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==" + "resolved" "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz" + "version" "7.17.1" + dependencies: + "@babel/types" "^7.3.0" + +"@types/debug@^4.0.0": + "integrity" "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==" + "resolved" "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz" + "version" "4.1.7" + dependencies: + "@types/ms" "*" + +"@types/eslint-scope@^3.7.3": + "integrity" "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==" + "resolved" "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz" + "version" "3.7.4" + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + "integrity" "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==" + "resolved" "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz" + "version" "8.4.5" + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree-jsx@^0.0.1": + "integrity" "sha512-gcLAYiMfQklDCPjQegGn0TBAn9it05ISEsEhlKQUddIk7o2XDokOcTN7HBO8tznM0D9dGezvHEfRZBfZf6me0A==" + "resolved" "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-0.0.1.tgz" + "version" "0.0.1" + dependencies: + "@types/estree" "*" + +"@types/estree@*": + "integrity" "sha512-BZWrtCU0bMVAIliIV+HJO1f1PR41M7NKjfxrFJwwhKI1KwhwOxYw1SXg9ao+CIMt774nFuGiG6eU+udtbEI9oQ==" + "resolved" "https://registry.npmjs.org/@types/estree/-/estree-0.0.52.tgz" + "version" "0.0.52" + +"@types/estree@^0.0.51": + "integrity" "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + "resolved" "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz" + "version" "0.0.51" + +"@types/graceful-fs@^4.1.3": + "integrity" "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==" + "resolved" "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz" + "version" "4.1.5" + dependencies: + "@types/node" "*" + +"@types/hast@^2.0.0": + "integrity" "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==" + "resolved" "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz" + "version" "2.3.4" + dependencies: + "@types/unist" "*" + +"@types/hoist-non-react-statics@^3.3.1": + "integrity" "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==" + "resolved" "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz" + "version" "3.3.1" + dependencies: + "@types/react" "*" + "hoist-non-react-statics" "^3.3.0" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + "integrity" "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + "resolved" "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" + "version" "2.0.4" + +"@types/istanbul-lib-report@*": + "integrity" "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==" + "resolved" "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + "integrity" "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==" + "resolved" "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^28.1.4": + "integrity" "sha512-telv6G5N7zRJiLcI3Rs3o+ipZ28EnE+7EvF0pSrt2pZOMnAVI/f+6/LucDxOvcBcTeTL3JMF744BbVQAVBUQRA==" + "resolved" "https://registry.npmjs.org/@types/jest/-/jest-28.1.4.tgz" + "version" "28.1.4" + dependencies: + "jest-matcher-utils" "^28.0.0" + "pretty-format" "^28.0.0" + +"@types/js-yaml@^4.0.0": + "integrity" "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==" + "resolved" "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz" + "version" "4.0.5" + +"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + "integrity" "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" + "version" "7.0.11" + +"@types/json5@^0.0.29": + "integrity" "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + "resolved" "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" + "version" "0.0.29" + +"@types/mdast@^3.0.0": + "integrity" "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==" + "resolved" "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz" + "version" "3.0.10" + dependencies: + "@types/unist" "*" + +"@types/mdurl@^1.0.0": + "integrity" "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + "resolved" "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz" + "version" "1.0.2" + +"@types/mdx@^2.0.0": + "integrity" "sha512-mJGfgj4aWpiKb8C0nnJJchs1sHBHn0HugkVfqqyQi7Wn6mBRksLeQsPOFvih/Pu8L1vlDzfe/LidhVHBeUk3aQ==" + "resolved" "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.2.tgz" + "version" "2.0.2" + +"@types/ms@*": + "integrity" "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + "resolved" "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz" + "version" "0.7.31" + +"@types/mysql@types/mysql": + "resolved" "git+ssh://git@github.com/types/mysql.git#c26b1bc2bac17010081455e3127a90fb2eafcec9" + "version" "2.0.0" + +"@types/mysql2@github:types/mysql2": + "resolved" "git+ssh://git@github.com/types/mysql2.git#89378b2cb3974ea8cdd1d633b8f056e54e5d2384" + "version" "1.0.0" + dependencies: + "@types/mysql" "types/mysql" + +"@types/node@*", "@types/node@^18.0.0": + "integrity" "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz" + "version" "18.0.0" + +"@types/parse5@^5.0.0": + "integrity" "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" + "resolved" "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz" + "version" "5.0.3" + +"@types/parse5@^6.0.0": + "integrity" "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==" + "resolved" "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz" + "version" "6.0.3" + +"@types/prettier@^2.1.5": + "integrity" "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==" + "resolved" "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz" + "version" "2.6.3" + +"@types/prop-types@*": + "integrity" "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + "resolved" "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz" + "version" "15.7.5" + +"@types/react-dom@^16.8 || ^17.0 || ^18.0", "@types/react-dom@^18.0.0": + "integrity" "sha512-OWPWTUrY/NIrjsAPkAk1wW9LZeIjSvkXRhclsFO8CZcZGCOg2G0YZy4ft+rOyYxy8B7ui5iZzi9OkDebZ7/QSA==" + "resolved" "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.5.tgz" + "version" "18.0.5" + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@^16.8 || ^17.0 || ^18.0", "@types/react@^18.0.14", "@types/react@>=16": + "integrity" "sha512-x4gGuASSiWmo0xjDLpm5mPb52syZHJx02VKbqUKdLmKtAwIh63XClGsiTI1K6DO5q7ox4xAsQrU+Gl3+gGXF9Q==" + "resolved" "https://registry.npmjs.org/@types/react/-/react-18.0.14.tgz" + "version" "18.0.14" + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + "csstype" "^3.0.2" + +"@types/scheduler@*": + "integrity" "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + "resolved" "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz" + "version" "0.16.2" + +"@types/stack-utils@^2.0.0": + "integrity" "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + "resolved" "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" + "version" "2.0.1" + +"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2": + "integrity" "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" + "resolved" "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz" + "version" "2.0.6" + +"@types/use-sync-external-store@^0.0.3": + "integrity" "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + "resolved" "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz" + "version" "0.0.3" + +"@types/yargs-parser@*": + "integrity" "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + "resolved" "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" + "version" "21.0.0" + +"@types/yargs@^17.0.8": + "integrity" "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==" + "resolved" "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz" + "version" "17.0.10" + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^5.30.3": + "integrity" "sha512-QEgE1uahnDbWEkZlidq7uKB630ny1NN8KbLPmznX+8hYsYpoV1/quG1Nzvs141FVuumuS7O0EpqYw3RB4AVzRg==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.3.tgz" + "version" "5.30.3" + dependencies: + "@typescript-eslint/scope-manager" "5.30.3" + "@typescript-eslint/type-utils" "5.30.3" + "@typescript-eslint/utils" "5.30.3" + "debug" "^4.3.4" + "functional-red-black-tree" "^1.0.1" + "ignore" "^5.2.0" + "regexpp" "^3.2.0" + "semver" "^7.3.7" + "tsutils" "^3.21.0" + +"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.21.0", "@typescript-eslint/parser@^5.30.3": + "integrity" "sha512-ddwGEPC3E49DduAUC8UThQafHRE5uc1NE8jdOgl+w8/NrYF50MJQNeD3u4JZrqAXdY9rJz0CdQ9HpNME20CzkA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.3.tgz" + "version" "5.30.3" + dependencies: + "@typescript-eslint/scope-manager" "5.30.3" + "@typescript-eslint/types" "5.30.3" + "@typescript-eslint/typescript-estree" "5.30.3" + "debug" "^4.3.4" + +"@typescript-eslint/scope-manager@5.30.3": + "integrity" "sha512-yVJIIUXeo/vv6Alj6lKBvsqnRs5hcxUpN3Dg3aD9Zv6r7p6Nn106jJcr5rnpRHAReEb/aMI2RWrt3JmL17eCVA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.3.tgz" + "version" "5.30.3" + dependencies: + "@typescript-eslint/types" "5.30.3" + "@typescript-eslint/visitor-keys" "5.30.3" + +"@typescript-eslint/type-utils@5.30.3": + "integrity" "sha512-IIzakE7OXOqdwPaXhRiPnaZ8OuJJYBLufOffd9fqzkI4IMFIYq8KC7bghdnF7QUJTirURRErQFrJ/w5UpwIqaw==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.3.tgz" + "version" "5.30.3" + dependencies: + "@typescript-eslint/utils" "5.30.3" + "debug" "^4.3.4" + "tsutils" "^3.21.0" + +"@typescript-eslint/types@5.30.3": + "integrity" "sha512-vshU3pjSTgBPNgfd55JLYngHkXuwQP68fxYFUAg1Uq+JrR3xG/XjvL9Dmv28CpOERtqwkaR4QQ3mD0NLZcE2Xw==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.3.tgz" + "version" "5.30.3" + +"@typescript-eslint/typescript-estree@5.30.3": + "integrity" "sha512-jqVh5N9AJx6+7yRgoA+ZelAFrHezgI9pzI9giv7s84DDOmtpFwTgURcpICDHyz9x6vAeOu91iACZ4dBTVfzIyA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.3.tgz" + "version" "5.30.3" + dependencies: + "@typescript-eslint/types" "5.30.3" + "@typescript-eslint/visitor-keys" "5.30.3" + "debug" "^4.3.4" + "globby" "^11.1.0" + "is-glob" "^4.0.3" + "semver" "^7.3.7" + "tsutils" "^3.21.0" + +"@typescript-eslint/utils@5.30.3": + "integrity" "sha512-OEaBXGxxdIy35H+jyXfYAMQ66KMJczK9hEhL3gR6IRbWe5PyK+bPDC9zbQNVII6rNFTfF/Mse0z21NlEU+vOMw==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.3.tgz" + "version" "5.30.3" + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.30.3" + "@typescript-eslint/types" "5.30.3" + "@typescript-eslint/typescript-estree" "5.30.3" + "eslint-scope" "^5.1.1" + "eslint-utils" "^3.0.0" + +"@typescript-eslint/visitor-keys@5.30.3": + "integrity" "sha512-ep2xtHOhnSRt6fDP9DSSxrA/FqZhdMF7/Y9fYsxrKss2uWJMbzJyBJ/We1fKc786BJ10pHwrzUlhvpz8i7XzBg==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.3.tgz" + "version" "5.30.3" + dependencies: + "@typescript-eslint/types" "5.30.3" + "eslint-visitor-keys" "^3.3.0" + +"@webassemblyjs/ast@1.11.1": + "integrity" "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + +"@webassemblyjs/floating-point-hex-parser@1.11.1": + "integrity" "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/helper-api-error@1.11.1": + "integrity" "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/helper-buffer@1.11.1": + "integrity" "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/helper-numbers@1.11.1": + "integrity" "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + "integrity" "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/helper-wasm-section@1.11.1": + "integrity" "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + +"@webassemblyjs/ieee754@1.11.1": + "integrity" "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.1": + "integrity" "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.1": + "integrity" "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/wasm-edit@1.11.1": + "integrity" "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + +"@webassemblyjs/wasm-gen@1.11.1": + "integrity" "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-opt@1.11.1": + "integrity" "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + +"@webassemblyjs/wasm-parser@1.11.1": + "integrity" "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wast-printer@1.11.1": + "integrity" "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + "integrity" "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + "resolved" "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" + "version" "1.2.0" + +"@xtuc/long@4.2.2": + "integrity" "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + "resolved" "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" + "version" "4.2.2" + +"acorn-import-assertions@^1.7.6": + "integrity" "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==" + "resolved" "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz" + "version" "1.8.0" + +"acorn-jsx@^5.0.0", "acorn-jsx@^5.3.2": + "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" + "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + "version" "5.3.2" + +"acorn-node@^1.8.2": + "integrity" "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==" + "resolved" "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz" + "version" "1.8.2" + dependencies: + "acorn" "^7.0.0" + "acorn-walk" "^7.0.0" + "xtend" "^4.0.2" + +"acorn-walk@^7.0.0": + "integrity" "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" + "version" "7.2.0" + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^8", "acorn@^8.0.0", "acorn@^8.4.1", "acorn@^8.5.0", "acorn@^8.7.1": + "integrity" "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz" + "version" "8.7.1" + +"acorn@^7.0.0": + "integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" + "version" "7.4.1" + +"aggregate-error@^3.0.0": + "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==" + "resolved" "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "clean-stack" "^2.0.0" + "indent-string" "^4.0.0" + +"ajv-keywords@^3.5.2": + "integrity" "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + "resolved" "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + "version" "3.5.2" + +"ajv@^6.10.0", "ajv@^6.12.4", "ajv@^6.12.5", "ajv@^6.9.1": + "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + "version" "6.12.6" + dependencies: + "fast-deep-equal" "^3.1.1" + "fast-json-stable-stringify" "^2.0.0" + "json-schema-traverse" "^0.4.1" + "uri-js" "^4.2.2" + +"ansi-escapes@^4.2.1", "ansi-escapes@^4.3.0", "ansi-escapes@^4.3.1": + "integrity" "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==" + "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + "version" "4.3.2" + dependencies: + "type-fest" "^0.21.3" + +"ansi-regex@^5.0.1": + "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + "version" "5.0.1" + +"ansi-regex@^6.0.1": + "integrity" "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" + "version" "6.0.1" + +"ansi-styles@^3.2.1": + "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + "version" "3.2.1" + dependencies: + "color-convert" "^1.9.0" + +"ansi-styles@^4.0.0": + "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "color-convert" "^2.0.1" + +"ansi-styles@^4.1.0": + "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "color-convert" "^2.0.1" + +"ansi-styles@^5.0.0": + "integrity" "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" + "version" "5.2.0" + +"ansi-styles@^6.0.0": + "integrity" "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz" + "version" "6.1.0" + +"anymatch@^3.0.3", "anymatch@~3.1.2": + "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==" + "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "normalize-path" "^3.0.0" + "picomatch" "^2.0.4" + +"arg@^5.0.2": + "integrity" "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + "resolved" "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" + "version" "5.0.2" + +"argparse@^1.0.7": + "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "sprintf-js" "~1.0.2" + +"argparse@^2.0.1": + "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + "version" "2.0.1" + +"aria-query@^4.2.2": + "integrity" "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==" + "resolved" "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz" + "version" "4.2.2" + dependencies: + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" + +"aria-query@^5.0.0": + "integrity" "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==" + "resolved" "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz" + "version" "5.0.0" + +"array-includes@^3.1.4", "array-includes@^3.1.5": + "integrity" "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==" + "resolved" "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz" + "version" "3.1.5" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.4" + "es-abstract" "^1.19.5" + "get-intrinsic" "^1.1.1" + "is-string" "^1.0.7" + +"array-union@^2.1.0": + "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + "version" "2.1.0" + +"array.prototype.flat@^1.2.5": + "integrity" "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==" + "resolved" "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + "es-abstract" "^1.19.2" + "es-shim-unscopables" "^1.0.0" + +"array.prototype.flatmap@^1.3.0": + "integrity" "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==" + "resolved" "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + "es-abstract" "^1.19.2" + "es-shim-unscopables" "^1.0.0" + +"ast-types-flow@^0.0.7": + "integrity" "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" + "resolved" "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz" + "version" "0.0.7" + +"astral-regex@^2.0.0": + "integrity" "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" + "resolved" "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + "version" "2.0.0" + +"astring@^1.6.0": + "integrity" "sha512-sRpyiNrx2dEYIMmUXprS8nlpRg2Drs8m9ElX9vVEXaCB4XEAJhKfs7IcX0IwShjuOAjLR6wzIrgoptz1n19i1A==" + "resolved" "https://registry.npmjs.org/astring/-/astring-1.8.3.tgz" + "version" "1.8.3" + +"asynckit@^0.4.0": + "integrity" "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "resolved" "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + "version" "0.4.0" + +"autoprefixer@^10.4.7": + "integrity" "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==" + "resolved" "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz" + "version" "10.4.7" + dependencies: + "browserslist" "^4.20.3" + "caniuse-lite" "^1.0.30001335" + "fraction.js" "^4.2.0" + "normalize-range" "^0.1.2" + "picocolors" "^1.0.0" + "postcss-value-parser" "^4.2.0" + +"axe-core@^4.4.2": + "integrity" "sha512-LVAaGp/wkkgYJcjmHsoKx4juT1aQvJyPcW09MLCjVTh3V2cc6PnyempiLMNH5iMdfIX/zdbjUx2KDjMLCTdPeA==" + "resolved" "https://registry.npmjs.org/axe-core/-/axe-core-4.4.2.tgz" + "version" "4.4.2" + +"axios@^0.27.2": + "integrity" "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==" + "resolved" "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz" + "version" "0.27.2" + dependencies: + "follow-redirects" "^1.14.9" + "form-data" "^4.0.0" + +"axobject-query@^2.2.0": + "integrity" "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" + "resolved" "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz" + "version" "2.2.0" + +"babel-jest@^28.1.2": + "integrity" "sha512-pfmoo6sh4L/+5/G2OOfQrGJgvH7fTa1oChnuYH2G/6gA+JwDvO8PELwvwnofKBMNrQsam0Wy/Rw+QSrBNewq2Q==" + "resolved" "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.2.tgz" + "version" "28.1.2" + dependencies: + "@jest/transform" "^28.1.2" + "@types/babel__core" "^7.1.14" + "babel-plugin-istanbul" "^6.1.1" + "babel-preset-jest" "^28.1.1" + "chalk" "^4.0.0" + "graceful-fs" "^4.2.9" + "slash" "^3.0.0" + +"babel-plugin-istanbul@^6.1.1": + "integrity" "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==" + "resolved" "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" + "version" "6.1.1" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + "istanbul-lib-instrument" "^5.0.4" + "test-exclude" "^6.0.0" + +"babel-plugin-jest-hoist@^28.1.1": + "integrity" "sha512-NovGCy5Hn25uMJSAU8FaHqzs13cFoOI4lhIujiepssjCKRsAo3TA734RDWSGxuFTsUJXerYOqQQodlxgmtqbzw==" + "resolved" "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +"babel-preset-current-node-syntax@^1.0.0": + "integrity" "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==" + "resolved" "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +"babel-preset-jest@^28.1.1": + "integrity" "sha512-FCq9Oud0ReTeWtcneYf/48981aTfXYuB9gbU4rBNNJVBSQ6ssv7E6v/qvbBxtOWwZFXjLZwpg+W3q7J6vhH25g==" + "resolved" "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "babel-plugin-jest-hoist" "^28.1.1" + "babel-preset-current-node-syntax" "^1.0.0" + +"bail@^1.0.0": + "integrity" "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" + "resolved" "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz" + "version" "1.0.5" + +"bail@^2.0.0": + "integrity" "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" + "resolved" "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz" + "version" "2.0.2" + +"balanced-match@^1.0.0": + "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + "version" "1.0.2" + +"binary-extensions@^2.0.0": + "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + "version" "2.2.0" + +"brace-expansion@^1.1.7": + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + "version" "1.1.11" + dependencies: + "balanced-match" "^1.0.0" + "concat-map" "0.0.1" + +"braces@^3.0.2", "braces@~3.0.2": + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" + "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "fill-range" "^7.0.1" + +"browserslist@^4.14.5", "browserslist@^4.20.2", "browserslist@^4.20.3", "browserslist@>= 4.21.0": + "integrity" "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==" + "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz" + "version" "4.21.1" + dependencies: + "caniuse-lite" "^1.0.30001359" + "electron-to-chromium" "^1.4.172" + "node-releases" "^2.0.5" + "update-browserslist-db" "^1.0.4" + +"bser@2.1.1": + "integrity" "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==" + "resolved" "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "node-int64" "^0.4.0" + +"buffer-from@^1.0.0": + "integrity" "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + "version" "1.1.2" + +"call-bind@^1.0.0", "call-bind@^1.0.2": + "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" + "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "function-bind" "^1.1.1" + "get-intrinsic" "^1.0.2" + +"callsites@^3.0.0": + "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + "version" "3.1.0" + +"camelcase-css@^2.0.1": + "integrity" "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" + "resolved" "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" + "version" "2.0.1" + +"camelcase@^5.3.1": + "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + "version" "5.3.1" + +"camelcase@^6.2.0": + "integrity" "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + "version" "6.3.0" + +"caniuse-lite@^1.0.30001332", "caniuse-lite@^1.0.30001335", "caniuse-lite@^1.0.30001359": + "integrity" "sha512-ybhCrjNtkFji1/Wto6SSJKkWk6kZgVQsDq5QI83SafsF6FXv2JB4df9eEdH6g8sdGgqTXrFLjAxqBGgYoU3azQ==" + "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001361.tgz" + "version" "1.0.30001361" + +"ccount@^1.0.0": + "integrity" "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==" + "resolved" "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz" + "version" "1.1.0" + +"ccount@^2.0.0": + "integrity" "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==" + "resolved" "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz" + "version" "2.0.1" + +"chalk@^2.0.0": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" + +"chalk@^4.0.0": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"chalk@^4.1.0": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"char-regex@^1.0.2": + "integrity" "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" + "resolved" "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" + "version" "1.0.2" + +"char-regex@^2.0.0": + "integrity" "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==" + "resolved" "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz" + "version" "2.0.1" + +"character-entities-html4@^1.0.0": + "integrity" "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==" + "resolved" "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz" + "version" "1.1.4" + +"character-entities-html4@^2.0.0": + "integrity" "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==" + "resolved" "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz" + "version" "2.1.0" + +"character-entities-legacy@^1.0.0": + "integrity" "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" + "resolved" "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz" + "version" "1.1.4" + +"character-entities-legacy@^3.0.0": + "integrity" "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==" + "resolved" "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz" + "version" "3.0.0" + +"character-entities@^1.0.0": + "integrity" "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" + "resolved" "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz" + "version" "1.2.4" + +"character-entities@^2.0.0": + "integrity" "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==" + "resolved" "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz" + "version" "2.0.2" + +"character-reference-invalid@^1.0.0": + "integrity" "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" + "resolved" "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz" + "version" "1.1.4" + +"character-reference-invalid@^2.0.0": + "integrity" "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==" + "resolved" "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz" + "version" "2.0.1" + +"chokidar@^3.5.3": + "integrity" "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==" + "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + "version" "3.5.3" + dependencies: + "anymatch" "~3.1.2" + "braces" "~3.0.2" + "glob-parent" "~5.1.2" + "is-binary-path" "~2.1.0" + "is-glob" "~4.0.1" + "normalize-path" "~3.0.0" + "readdirp" "~3.6.0" + optionalDependencies: + "fsevents" "~2.3.2" + +"chrome-trace-event@^1.0.2": + "integrity" "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" + "resolved" "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" + "version" "1.0.3" + +"ci-info@^3.2.0": + "integrity" "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==" + "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz" + "version" "3.3.2" + +"cjs-module-lexer@^1.0.0": + "integrity" "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" + "resolved" "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz" + "version" "1.2.2" + +"clean-stack@^2.0.0": + "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + "version" "2.2.0" + +"cli-cursor@^3.1.0": + "integrity" "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==" + "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "restore-cursor" "^3.1.0" + +"cli-truncate@^2.1.0": + "integrity" "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==" + "resolved" "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "slice-ansi" "^3.0.0" + "string-width" "^4.2.0" + +"cli-truncate@^3.1.0": + "integrity" "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==" + "resolved" "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "slice-ansi" "^5.0.0" + "string-width" "^5.0.0" + +"clipboard@^2.0.0": + "integrity" "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==" + "resolved" "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz" + "version" "2.0.11" + dependencies: + "good-listener" "^1.2.2" + "select" "^1.1.2" + "tiny-emitter" "^2.0.0" + +"cliui@^7.0.2": + "integrity" "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + "version" "7.0.4" + dependencies: + "string-width" "^4.2.0" + "strip-ansi" "^6.0.0" + "wrap-ansi" "^7.0.0" + +"clsx@^1.1.1": + "integrity" "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" + "resolved" "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz" + "version" "1.1.1" + +"co@^4.6.0": + "integrity" "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" + "resolved" "https://registry.npmjs.org/co/-/co-4.6.0.tgz" + "version" "4.6.0" + +"collect-v8-coverage@^1.0.0": + "integrity" "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + "resolved" "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz" + "version" "1.0.1" + +"color-convert@^1.9.0": + "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + "version" "1.9.3" + dependencies: + "color-name" "1.1.3" + +"color-convert@^2.0.1": + "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "color-name" "~1.1.4" + +"color-name@^1.1.4": + "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + "version" "1.1.4" + +"color-name@~1.1.4": + "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + "version" "1.1.4" + +"color-name@1.1.3": + "integrity" "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + "version" "1.1.3" + +"colorette@^2.0.16", "colorette@^2.0.17": + "integrity" "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" + "resolved" "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" + "version" "2.0.19" + +"combined-stream@^1.0.8": + "integrity" "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==" + "resolved" "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + "version" "1.0.8" + dependencies: + "delayed-stream" "~1.0.0" + +"comma-separated-tokens@^1.0.0": + "integrity" "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" + "resolved" "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz" + "version" "1.0.8" + +"comma-separated-tokens@^2.0.0": + "integrity" "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==" + "resolved" "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz" + "version" "2.0.2" + +"commander@^2.20.0": + "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + "version" "2.20.3" + +"commander@^9.3.0": + "integrity" "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==" + "resolved" "https://registry.npmjs.org/commander/-/commander-9.3.0.tgz" + "version" "9.3.0" + +"concat-map@0.0.1": + "integrity" "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "version" "0.0.1" + +"convert-source-map@^1.4.0", "convert-source-map@^1.6.0", "convert-source-map@^1.7.0": + "integrity" "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==" + "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "safe-buffer" "~5.1.1" + +"core-js-pure@^3.20.2": + "integrity" "sha512-XpoouuqIj4P+GWtdyV8ZO3/u4KftkeDVMfvp+308eGMhCrA3lVDSmAxO0c6GGOcmgVlaKDrgWVMo49h2ab/TDA==" + "resolved" "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.3.tgz" + "version" "3.23.3" + +"cross-spawn@^7.0.2", "cross-spawn@^7.0.3": + "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + "version" "7.0.3" + dependencies: + "path-key" "^3.1.0" + "shebang-command" "^2.0.0" + "which" "^2.0.1" + +"cssesc@^3.0.0": + "integrity" "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + "resolved" "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" + "version" "3.0.0" + +"csstype@^3.0.2": + "integrity" "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + "resolved" "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz" + "version" "3.1.0" + +"damerau-levenshtein@^1.0.8": + "integrity" "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" + "resolved" "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz" + "version" "1.0.8" + +"date-fns@^2.28.0": + "integrity" "sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==" + "resolved" "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz" + "version" "2.28.0" + +"debug@^2.6.9": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" + dependencies: + "ms" "2.0.0" + +"debug@^3.2.7": + "integrity" "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + "version" "3.2.7" + dependencies: + "ms" "^2.1.1" + +"debug@^4.0.0", "debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.2", "debug@^4.3.4": + "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + "version" "4.3.4" + dependencies: + "ms" "2.1.2" + +"decode-named-character-reference@^1.0.0": + "integrity" "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==" + "resolved" "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "character-entities" "^2.0.0" + +"dedent@^0.7.0": + "integrity" "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + "resolved" "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" + "version" "0.7.0" + +"deep-is@^0.1.3": + "integrity" "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + "version" "0.1.4" + +"deepmerge@^4.2.2": + "integrity" "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" + "version" "4.2.2" + +"define-properties@^1.1.3", "define-properties@^1.1.4": + "integrity" "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==" + "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" + "version" "1.1.4" + dependencies: + "has-property-descriptors" "^1.0.0" + "object-keys" "^1.1.1" + +"defined@^1.0.0": + "integrity" "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==" + "resolved" "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz" + "version" "1.0.0" + +"delayed-stream@~1.0.0": + "integrity" "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + "resolved" "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + "version" "1.0.0" + +"delegate@^3.1.2": + "integrity" "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" + "resolved" "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz" + "version" "3.2.0" + +"denque@^2.0.1": + "integrity" "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==" + "resolved" "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz" + "version" "2.0.1" + +"dequal@^2.0.0": + "integrity" "sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==" + "resolved" "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz" + "version" "2.0.2" + +"detect-newline@^3.0.0": + "integrity" "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" + "resolved" "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" + "version" "3.1.0" + +"detective@^5.2.1": + "integrity" "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==" + "resolved" "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz" + "version" "5.2.1" + dependencies: + "acorn-node" "^1.8.2" + "defined" "^1.0.0" + "minimist" "^1.2.6" + +"didyoumean@^1.2.2": + "integrity" "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + "resolved" "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz" + "version" "1.2.2" + +"diff-sequences@^28.1.1": + "integrity" "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==" + "resolved" "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz" + "version" "28.1.1" + +"diff@^5.0.0": + "integrity" "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==" + "resolved" "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz" + "version" "5.1.0" + +"dir-glob@^3.0.1": + "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" + "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "path-type" "^4.0.0" + +"dlv@^1.1.3": + "integrity" "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + "resolved" "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz" + "version" "1.1.3" + +"doctrine@^2.1.0": + "integrity" "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==" + "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "esutils" "^2.0.2" + +"doctrine@^3.0.0": + "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" + "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "esutils" "^2.0.2" + +"dom-accessibility-api@^0.5.9": + "integrity" "sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==" + "resolved" "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz" + "version" "0.5.14" + +"eastasianwidth@^0.2.0": + "integrity" "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "resolved" "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + "version" "0.2.0" + +"electron-to-chromium@^1.4.172": + "integrity" "sha512-FYPir3NSBEGexSZUEeht81oVhHfLFl6mhUKSkjHN/iB/TwEIt/WHQrqVGfTLN5gQxwJCQkIJBe05eOXjI7omgg==" + "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.177.tgz" + "version" "1.4.177" + +"emittery@^0.10.2": + "integrity" "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==" + "resolved" "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz" + "version" "0.10.2" + +"emoji-regex@^8.0.0": + "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + "version" "8.0.0" + +"emoji-regex@^9.2.2": + "integrity" "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + "version" "9.2.2" + +"enhanced-resolve@^5.9.3": + "integrity" "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==" + "resolved" "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz" + "version" "5.10.0" + dependencies: + "graceful-fs" "^4.2.4" + "tapable" "^2.2.0" + +"error-ex@^1.3.1": + "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" + "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "is-arrayish" "^0.2.1" + +"es-abstract@^1.19.0", "es-abstract@^1.19.1", "es-abstract@^1.19.2", "es-abstract@^1.19.5": + "integrity" "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==" + "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz" + "version" "1.20.1" + dependencies: + "call-bind" "^1.0.2" + "es-to-primitive" "^1.2.1" + "function-bind" "^1.1.1" + "function.prototype.name" "^1.1.5" + "get-intrinsic" "^1.1.1" + "get-symbol-description" "^1.0.0" + "has" "^1.0.3" + "has-property-descriptors" "^1.0.0" + "has-symbols" "^1.0.3" + "internal-slot" "^1.0.3" + "is-callable" "^1.2.4" + "is-negative-zero" "^2.0.2" + "is-regex" "^1.1.4" + "is-shared-array-buffer" "^1.0.2" + "is-string" "^1.0.7" + "is-weakref" "^1.0.2" + "object-inspect" "^1.12.0" + "object-keys" "^1.1.1" + "object.assign" "^4.1.2" + "regexp.prototype.flags" "^1.4.3" + "string.prototype.trimend" "^1.0.5" + "string.prototype.trimstart" "^1.0.5" + "unbox-primitive" "^1.0.2" + +"es-module-lexer@^0.9.0": + "integrity" "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + "resolved" "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz" + "version" "0.9.3" + +"es-shim-unscopables@^1.0.0": + "integrity" "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==" + "resolved" "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "has" "^1.0.3" + +"es-to-primitive@^1.2.1": + "integrity" "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==" + "resolved" "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + "version" "1.2.1" + dependencies: + "is-callable" "^1.1.4" + "is-date-object" "^1.0.1" + "is-symbol" "^1.0.2" + +"escalade@^3.1.1": + "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + "version" "3.1.1" + +"escape-string-regexp@^1.0.5": + "integrity" "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + "version" "1.0.5" + +"escape-string-regexp@^2.0.0": + "integrity" "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" + "version" "2.0.0" + +"escape-string-regexp@^4.0.0": + "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + "version" "4.0.0" + +"escape-string-regexp@^5.0.0": + "integrity" "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz" + "version" "5.0.0" + +"eslint-config-next@^12.2.0": + "integrity" "sha512-QWzNegadFXjQ0h3hixnLacRM9Kot85vQefyNsA8IeOnERZMz0Gvays1W6DMCjSxJbnCwuWaMXj9DCpar5IahRA==" + "resolved" "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.2.0.tgz" + "version" "12.2.0" + dependencies: + "@next/eslint-plugin-next" "12.2.0" + "@rushstack/eslint-patch" "^1.1.3" + "@typescript-eslint/parser" "^5.21.0" + "eslint-import-resolver-node" "^0.3.6" + "eslint-import-resolver-typescript" "^2.7.1" + "eslint-plugin-import" "^2.26.0" + "eslint-plugin-jsx-a11y" "^6.5.1" + "eslint-plugin-react" "^7.29.4" + "eslint-plugin-react-hooks" "^4.5.0" + +"eslint-config-prettier@^8.5.0": + "integrity" "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==" + "resolved" "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" + "version" "8.5.0" + +"eslint-import-resolver-node@^0.3.6": + "integrity" "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==" + "resolved" "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz" + "version" "0.3.6" + dependencies: + "debug" "^3.2.7" + "resolve" "^1.20.0" + +"eslint-import-resolver-typescript@^2.7.1": + "integrity" "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==" + "resolved" "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz" + "version" "2.7.1" + dependencies: + "debug" "^4.3.4" + "glob" "^7.2.0" + "is-glob" "^4.0.3" + "resolve" "^1.22.0" + "tsconfig-paths" "^3.14.1" + +"eslint-module-utils@^2.7.3": + "integrity" "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==" + "resolved" "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz" + "version" "2.7.3" + dependencies: + "debug" "^3.2.7" + "find-up" "^2.1.0" + +"eslint-plugin-import@*", "eslint-plugin-import@^2.26.0": + "integrity" "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==" + "resolved" "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz" + "version" "2.26.0" + dependencies: + "array-includes" "^3.1.4" + "array.prototype.flat" "^1.2.5" + "debug" "^2.6.9" + "doctrine" "^2.1.0" + "eslint-import-resolver-node" "^0.3.6" + "eslint-module-utils" "^2.7.3" + "has" "^1.0.3" + "is-core-module" "^2.8.1" + "is-glob" "^4.0.3" + "minimatch" "^3.1.2" + "object.values" "^1.1.5" + "resolve" "^1.22.0" + "tsconfig-paths" "^3.14.1" + +"eslint-plugin-jsx-a11y@^6.5.1": + "integrity" "sha512-kTeLuIzpNhXL2CwLlc8AHI0aFRwWHcg483yepO9VQiHzM9bZwJdzTkzBszbuPrbgGmq2rlX/FaT2fJQsjUSHsw==" + "resolved" "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.0.tgz" + "version" "6.6.0" + dependencies: + "@babel/runtime" "^7.18.3" + "aria-query" "^4.2.2" + "array-includes" "^3.1.5" + "ast-types-flow" "^0.0.7" + "axe-core" "^4.4.2" + "axobject-query" "^2.2.0" + "damerau-levenshtein" "^1.0.8" + "emoji-regex" "^9.2.2" + "has" "^1.0.3" + "jsx-ast-utils" "^3.3.1" + "language-tags" "^1.0.5" + "minimatch" "^3.1.2" + "semver" "^6.3.0" + +"eslint-plugin-react-hooks@^4.5.0": + "integrity" "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==" + "resolved" "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz" + "version" "4.6.0" + +"eslint-plugin-react@^7.29.4", "eslint-plugin-react@^7.30.1": + "integrity" "sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg==" + "resolved" "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz" + "version" "7.30.1" + dependencies: + "array-includes" "^3.1.5" + "array.prototype.flatmap" "^1.3.0" + "doctrine" "^2.1.0" + "estraverse" "^5.3.0" + "jsx-ast-utils" "^2.4.1 || ^3.0.0" + "minimatch" "^3.1.2" + "object.entries" "^1.1.5" + "object.fromentries" "^2.0.5" + "object.hasown" "^1.1.1" + "object.values" "^1.1.5" + "prop-types" "^15.8.1" + "resolve" "^2.0.0-next.3" + "semver" "^6.3.0" + "string.prototype.matchall" "^4.0.7" + +"eslint-scope@^5.1.1", "eslint-scope@5.1.1": + "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==" + "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "esrecurse" "^4.3.0" + "estraverse" "^4.1.1" + +"eslint-scope@^7.1.1": + "integrity" "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==" + "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" + "version" "7.1.1" + dependencies: + "esrecurse" "^4.3.0" + "estraverse" "^5.2.0" + +"eslint-utils@^3.0.0": + "integrity" "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==" + "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "eslint-visitor-keys" "^2.0.0" + +"eslint-visitor-keys@^2.0.0": + "integrity" "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" + "version" "2.1.0" + +"eslint-visitor-keys@^3.3.0": + "integrity" "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" + "version" "3.3.0" + +"eslint@*", "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^7.23.0 || ^8.0.0", "eslint@^8.19.0", "eslint@>=5", "eslint@>=7.0.0": + "integrity" "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==" + "resolved" "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz" + "version" "8.19.0" + dependencies: + "@eslint/eslintrc" "^1.3.0" + "@humanwhocodes/config-array" "^0.9.2" + "ajv" "^6.10.0" + "chalk" "^4.0.0" + "cross-spawn" "^7.0.2" + "debug" "^4.3.2" + "doctrine" "^3.0.0" + "escape-string-regexp" "^4.0.0" + "eslint-scope" "^7.1.1" + "eslint-utils" "^3.0.0" + "eslint-visitor-keys" "^3.3.0" + "espree" "^9.3.2" + "esquery" "^1.4.0" + "esutils" "^2.0.2" + "fast-deep-equal" "^3.1.3" + "file-entry-cache" "^6.0.1" + "functional-red-black-tree" "^1.0.1" + "glob-parent" "^6.0.1" + "globals" "^13.15.0" + "ignore" "^5.2.0" + "import-fresh" "^3.0.0" + "imurmurhash" "^0.1.4" + "is-glob" "^4.0.0" + "js-yaml" "^4.1.0" + "json-stable-stringify-without-jsonify" "^1.0.1" + "levn" "^0.4.1" + "lodash.merge" "^4.6.2" + "minimatch" "^3.1.2" + "natural-compare" "^1.4.0" + "optionator" "^0.9.1" + "regexpp" "^3.2.0" + "strip-ansi" "^6.0.1" + "strip-json-comments" "^3.1.0" + "text-table" "^0.2.0" + "v8-compile-cache" "^2.0.3" + +"espree@^9.3.2": + "integrity" "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==" + "resolved" "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz" + "version" "9.3.2" + dependencies: + "acorn" "^8.7.1" + "acorn-jsx" "^5.3.2" + "eslint-visitor-keys" "^3.3.0" + +"esprima@^4.0.0": + "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + "version" "4.0.1" + +"esquery@^1.4.0": + "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==" + "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "estraverse" "^5.1.0" + +"esrecurse@^4.3.0": + "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" + "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "estraverse" "^5.2.0" + +"estraverse@^4.1.1": + "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + "version" "4.3.0" + +"estraverse@^5.1.0", "estraverse@^5.2.0", "estraverse@^5.3.0": + "integrity" "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + "version" "5.3.0" + +"estree-util-attach-comments@^2.0.0": + "integrity" "sha512-1wTBNndwMIsnvnuxjFIaYQz0M7PsCvcgP0YD7/dU8xWh1FuHk+O6pYpT4sLa5THY/CywJvdIdgw4uhozujga/g==" + "resolved" "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "@types/estree" "^0.0.51" + +"estree-util-build-jsx@^2.0.0": + "integrity" "sha512-gsBGfsY6LOJUIDwmMkTOcgCX+3r/LUjRBccgHMSW55PHjhZsV13RmPl/iwpAvW8KcQqoN9P0FEFWTSS2Zc5bGA==" + "resolved" "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "@types/estree-jsx" "^0.0.1" + "estree-util-is-identifier-name" "^2.0.0" + "estree-walker" "^3.0.0" + +"estree-util-is-identifier-name@^2.0.0": + "integrity" "sha512-rxZj1GkQhY4x1j/CSnybK9cGuMFQYFPLq0iNyopqf14aOVLFtMv7Esika+ObJWPWiOHuMOAHz3YkWoLYYRnzWQ==" + "resolved" "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.0.1.tgz" + "version" "2.0.1" + +"estree-util-visit@^1.0.0": + "integrity" "sha512-3lXJ4Us9j8TUif9cWcQy81t9p5OLasnDuuhrFiqb+XstmKC1d1LmrQWYsY49/9URcfHE64mPypDBaNK9NwWDPQ==" + "resolved" "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "@types/estree-jsx" "^0.0.1" + "@types/unist" "^2.0.0" + +"estree-walker@^3.0.0": + "integrity" "sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g==" + "resolved" "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.1.tgz" + "version" "3.0.1" + +"esutils@^2.0.2": + "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + "version" "2.0.3" + +"events@^3.2.0": + "integrity" "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + "resolved" "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + "version" "3.3.0" + +"execa@^5.0.0": + "integrity" "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==" + "resolved" "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "cross-spawn" "^7.0.3" + "get-stream" "^6.0.0" + "human-signals" "^2.1.0" + "is-stream" "^2.0.0" + "merge-stream" "^2.0.0" + "npm-run-path" "^4.0.1" + "onetime" "^5.1.2" + "signal-exit" "^3.0.3" + "strip-final-newline" "^2.0.0" + +"execa@^6.1.0": + "integrity" "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==" + "resolved" "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "cross-spawn" "^7.0.3" + "get-stream" "^6.0.1" + "human-signals" "^3.0.1" + "is-stream" "^3.0.0" + "merge-stream" "^2.0.0" + "npm-run-path" "^5.1.0" + "onetime" "^6.0.0" + "signal-exit" "^3.0.7" + "strip-final-newline" "^3.0.0" + +"exit@^0.1.2": + "integrity" "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" + "resolved" "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" + "version" "0.1.2" + +"expect@^28.1.1": + "integrity" "sha512-/AANEwGL0tWBwzLNOvO0yUdy2D52jVdNXppOqswC49sxMN2cPWsGCQdzuIf9tj6hHoBQzNvx75JUYuQAckPo3w==" + "resolved" "https://registry.npmjs.org/expect/-/expect-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "@jest/expect-utils" "^28.1.1" + "jest-get-type" "^28.0.2" + "jest-matcher-utils" "^28.1.1" + "jest-message-util" "^28.1.1" + "jest-util" "^28.1.1" + +"extend-shallow@^2.0.1": + "integrity" "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==" + "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "is-extendable" "^0.1.0" + +"extend@^3.0.0": + "integrity" "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "resolved" "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + "version" "3.0.2" + +"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": + "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + "version" "3.1.3" + +"fast-glob@^3.2.11", "fast-glob@^3.2.9": + "integrity" "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==" + "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz" + "version" "3.2.11" + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + "glob-parent" "^5.1.2" + "merge2" "^1.3.0" + "micromatch" "^4.0.4" + +"fast-json-stable-stringify@^2.0.0": + "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + "version" "2.1.0" + +"fast-levenshtein@^2.0.6": + "integrity" "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + "version" "2.0.6" + +"fastq@^1.6.0": + "integrity" "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==" + "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" + "version" "1.13.0" + dependencies: + "reusify" "^1.0.4" + +"fb-watchman@^2.0.0": + "integrity" "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==" + "resolved" "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "bser" "2.1.1" + +"file-entry-cache@^6.0.1": + "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==" + "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "flat-cache" "^3.0.4" + +"fill-range@^7.0.1": + "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "to-regex-range" "^5.0.1" + +"find-up@^2.1.0": + "integrity" "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "locate-path" "^2.0.0" + +"find-up@^4.0.0", "find-up@^4.1.0": + "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "locate-path" "^5.0.0" + "path-exists" "^4.0.0" + +"flat-cache@^3.0.4": + "integrity" "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==" + "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "flatted" "^3.1.0" + "rimraf" "^3.0.2" + +"flatted@^3.1.0": + "integrity" "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==" + "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz" + "version" "3.2.6" + +"follow-redirects@^1.14.9": + "integrity" "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" + "resolved" "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz" + "version" "1.15.1" + +"form-data@^4.0.0": + "integrity" "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==" + "resolved" "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "asynckit" "^0.4.0" + "combined-stream" "^1.0.8" + "mime-types" "^2.1.12" + +"fraction.js@^4.2.0": + "integrity" "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" + "resolved" "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz" + "version" "4.2.0" + +"fs.realpath@^1.0.0": + "integrity" "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "version" "1.0.0" + +"function-bind@^1.1.1": + "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + "version" "1.1.1" + +"function.prototype.name@^1.1.5": + "integrity" "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==" + "resolved" "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + "es-abstract" "^1.19.0" + "functions-have-names" "^1.2.2" + +"functional-red-black-tree@^1.0.1": + "integrity" "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + "resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" + "version" "1.0.1" + +"functions-have-names@^1.2.2": + "integrity" "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + "resolved" "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" + "version" "1.2.3" + +"generate-function@^2.3.1": + "integrity" "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==" + "resolved" "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz" + "version" "2.3.1" + dependencies: + "is-property" "^1.0.2" + +"gensync@^1.0.0-beta.2": + "integrity" "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + "resolved" "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + "version" "1.0.0-beta.2" + +"get-caller-file@^2.0.5": + "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + "version" "2.0.5" + +"get-intrinsic@^1.0.2", "get-intrinsic@^1.1.0", "get-intrinsic@^1.1.1": + "integrity" "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==" + "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "function-bind" "^1.1.1" + "has" "^1.0.3" + "has-symbols" "^1.0.3" + +"get-package-type@^0.1.0": + "integrity" "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" + "resolved" "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" + "version" "0.1.0" + +"get-stream@^6.0.0", "get-stream@^6.0.1": + "integrity" "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + "version" "6.0.1" + +"get-symbol-description@^1.0.0": + "integrity" "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==" + "resolved" "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "call-bind" "^1.0.2" + "get-intrinsic" "^1.1.1" + +"github-slugger@^1.1.1": + "integrity" "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==" + "resolved" "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz" + "version" "1.4.0" + +"glob-parent@^5.1.2", "glob-parent@~5.1.2": + "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "is-glob" "^4.0.1" + +"glob-parent@^6.0.1": + "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "is-glob" "^4.0.3" + +"glob-parent@^6.0.2": + "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "is-glob" "^4.0.3" + +"glob-to-regexp@^0.4.1": + "integrity" "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + "resolved" "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" + "version" "0.4.1" + +"glob@^7.1.3", "glob@^7.1.4", "glob@7.1.7": + "integrity" "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" + "version" "7.1.7" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.4" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@^7.2.0": + "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + "version" "7.2.3" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.1.1" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"globals@^11.1.0": + "integrity" "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "resolved" "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + "version" "11.12.0" + +"globals@^13.15.0": + "integrity" "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==" + "resolved" "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz" + "version" "13.15.0" + dependencies: + "type-fest" "^0.20.2" + +"globby@^11.1.0": + "integrity" "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==" + "resolved" "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + "version" "11.1.0" + dependencies: + "array-union" "^2.1.0" + "dir-glob" "^3.0.1" + "fast-glob" "^3.2.9" + "ignore" "^5.2.0" + "merge2" "^1.4.1" + "slash" "^3.0.0" + +"good-listener@^1.2.2": + "integrity" "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==" + "resolved" "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz" + "version" "1.2.2" + dependencies: + "delegate" "^3.1.2" + +"graceful-fs@^4.1.2", "graceful-fs@^4.2.4", "graceful-fs@^4.2.9": + "integrity" "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + "version" "4.2.10" + +"gray-matter@^4.0.3": + "integrity" "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==" + "resolved" "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "js-yaml" "^3.13.1" + "kind-of" "^6.0.2" + "section-matter" "^1.0.0" + "strip-bom-string" "^1.0.0" + +"harmony-reflect@^1.4.6": + "integrity" "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" + "resolved" "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz" + "version" "1.6.2" + +"has-bigints@^1.0.1", "has-bigints@^1.0.2": + "integrity" "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + "resolved" "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" + "version" "1.0.2" + +"has-flag@^3.0.0": + "integrity" "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + "version" "3.0.0" + +"has-flag@^4.0.0": + "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + "version" "4.0.0" + +"has-property-descriptors@^1.0.0": + "integrity" "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==" + "resolved" "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "get-intrinsic" "^1.1.1" + +"has-symbols@^1.0.1", "has-symbols@^1.0.2", "has-symbols@^1.0.3": + "integrity" "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + "version" "1.0.3" + +"has-tostringtag@^1.0.0": + "integrity" "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==" + "resolved" "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "has-symbols" "^1.0.2" + +"has@^1.0.3": + "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" + "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "function-bind" "^1.1.1" + +"hast-util-from-parse5@^6.0.0": + "integrity" "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==" + "resolved" "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "@types/parse5" "^5.0.0" + "hastscript" "^6.0.0" + "property-information" "^5.0.0" + "vfile" "^4.0.0" + "vfile-location" "^3.2.0" + "web-namespaces" "^1.0.0" + +"hast-util-from-parse5@^7.0.0": + "integrity" "sha512-m8yhANIAccpU4K6+121KpPP55sSl9/samzQSQGpb0mTExcNh2WlvjtMwSWFhg6uqD4Rr6Nfa8N6TMypQM51rzQ==" + "resolved" "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.0.tgz" + "version" "7.1.0" + dependencies: + "@types/hast" "^2.0.0" + "@types/parse5" "^6.0.0" + "@types/unist" "^2.0.0" + "hastscript" "^7.0.0" + "property-information" "^6.0.0" + "vfile" "^5.0.0" + "vfile-location" "^4.0.0" + "web-namespaces" "^2.0.0" + +"hast-util-has-property@^2.0.0": + "integrity" "sha512-4Qf++8o5v14us4Muv3HRj+Er6wTNGA/N9uCaZMty4JWvyFKLdhULrv4KE1b65AthsSO9TXSZnjuxS8ecIyhb0w==" + "resolved" "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-2.0.0.tgz" + "version" "2.0.0" + +"hast-util-heading-rank@^2.0.0": + "integrity" "sha512-w+Rw20Q/iWp2Bcnr6uTrYU6/ftZLbHKhvc8nM26VIWpDqDMlku2iXUVTeOlsdoih/UKQhY7PHQ+vZ0Aqq8bxtQ==" + "resolved" "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "@types/hast" "^2.0.0" + +"hast-util-is-element@^1.0.0": + "integrity" "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==" + "resolved" "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz" + "version" "1.1.0" + +"hast-util-is-element@^2.0.0": + "integrity" "sha512-thjnlGAnwP8ef/GSO1Q8BfVk2gundnc2peGQqEg2kUt/IqesiGg/5mSwN2fE7nLzy61pg88NG6xV+UrGOrx9EA==" + "resolved" "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "@types/hast" "^2.0.0" + "@types/unist" "^2.0.0" + +"hast-util-parse-selector@^2.0.0": + "integrity" "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==" + "resolved" "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz" + "version" "2.2.5" + +"hast-util-parse-selector@^3.0.0": + "integrity" "sha512-AyjlI2pTAZEOeu7GeBPZhROx0RHBnydkQIXlhnFzDi0qfXTmGUWoCYZtomHbrdrheV4VFUlPcfJ6LMF5T6sQzg==" + "resolved" "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "@types/hast" "^2.0.0" + +"hast-util-to-estree@^2.0.0": + "integrity" "sha512-UQrZVeBj6A9od0lpFvqHKNSH9zvDrNoyWKbveu1a2oSCXEDUI+3bnd6BoiQLPnLrcXXn/jzJ6y9hmJTTlvf8lQ==" + "resolved" "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "@types/estree-jsx" "^0.0.1" + "@types/hast" "^2.0.0" + "@types/unist" "^2.0.0" + "comma-separated-tokens" "^2.0.0" + "estree-util-attach-comments" "^2.0.0" + "estree-util-is-identifier-name" "^2.0.0" + "hast-util-whitespace" "^2.0.0" + "mdast-util-mdx-expression" "^1.0.0" + "mdast-util-mdxjs-esm" "^1.0.0" + "property-information" "^6.0.0" + "space-separated-tokens" "^2.0.0" + "style-to-object" "^0.3.0" + "unist-util-position" "^4.0.0" + "zwitch" "^2.0.0" + +"hast-util-to-html@^7.1.1": + "integrity" "sha512-yk2+1p3EJTEE9ZEUkgHsUSVhIpCsL/bvT8E5GzmWc+N1Po5gBw+0F8bo7dpxXR0nu0bQVxVZGX2lBGF21CmeDw==" + "resolved" "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-7.1.3.tgz" + "version" "7.1.3" + dependencies: + "ccount" "^1.0.0" + "comma-separated-tokens" "^1.0.0" + "hast-util-is-element" "^1.0.0" + "hast-util-whitespace" "^1.0.0" + "html-void-elements" "^1.0.0" + "property-information" "^5.0.0" + "space-separated-tokens" "^1.0.0" + "stringify-entities" "^3.0.1" + "unist-util-is" "^4.0.0" + "xtend" "^4.0.0" + +"hast-util-to-html@^8.0.0": + "integrity" "sha512-/D/E5ymdPYhHpPkuTHOUkSatxr4w1ZKrZsG0Zv/3C2SRVT0JFJG53VS45AMrBtYk0wp5A7ksEhiC8QaOZM95+A==" + "resolved" "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.3.tgz" + "version" "8.0.3" + dependencies: + "@types/hast" "^2.0.0" + "ccount" "^2.0.0" + "comma-separated-tokens" "^2.0.0" + "hast-util-is-element" "^2.0.0" + "hast-util-whitespace" "^2.0.0" + "html-void-elements" "^2.0.0" + "property-information" "^6.0.0" + "space-separated-tokens" "^2.0.0" + "stringify-entities" "^4.0.2" + "unist-util-is" "^5.0.0" + +"hast-util-to-string@^1.0.0": + "integrity" "sha512-eK0MxRX47AV2eZ+Lyr18DCpQgodvaS3fAQO2+b9Two9F5HEoRPhiUMNzoXArMJfZi2yieFzUBMRl3HNJ3Jus3w==" + "resolved" "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-1.0.4.tgz" + "version" "1.0.4" + +"hast-util-to-string@^2.0.0": + "integrity" "sha512-02AQ3vLhuH3FisaMM+i/9sm4OXGSq1UhOOCpTLLQtHdL3tZt7qil69r8M8iDkZYyC0HCFylcYoP+8IO7ddta1A==" + "resolved" "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "@types/hast" "^2.0.0" + +"hast-util-whitespace@^1.0.0": + "integrity" "sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==" + "resolved" "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz" + "version" "1.0.4" + +"hast-util-whitespace@^2.0.0": + "integrity" "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==" + "resolved" "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz" + "version" "2.0.0" + +"hastscript@^6.0.0": + "integrity" "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==" + "resolved" "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "@types/hast" "^2.0.0" + "comma-separated-tokens" "^1.0.0" + "hast-util-parse-selector" "^2.0.0" + "property-information" "^5.0.0" + "space-separated-tokens" "^1.0.0" + +"hastscript@^7.0.0": + "integrity" "sha512-uA8ooUY4ipaBvKcMuPehTAB/YfFLSSzCwFSwT6ltJbocFUKH/GDHLN+tflq7lSRf9H86uOuxOFkh1KgIy3Gg2g==" + "resolved" "https://registry.npmjs.org/hastscript/-/hastscript-7.0.2.tgz" + "version" "7.0.2" + dependencies: + "@types/hast" "^2.0.0" + "comma-separated-tokens" "^2.0.0" + "hast-util-parse-selector" "^3.0.0" + "property-information" "^6.0.0" + "space-separated-tokens" "^2.0.0" + +"hoist-non-react-statics@^3.3.0", "hoist-non-react-statics@^3.3.2": + "integrity" "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==" + "resolved" "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz" + "version" "3.3.2" + dependencies: + "react-is" "^16.7.0" + +"html-escaper@^2.0.0": + "integrity" "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + "resolved" "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" + "version" "2.0.2" + +"html-void-elements@^1.0.0": + "integrity" "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" + "resolved" "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz" + "version" "1.0.5" + +"html-void-elements@^2.0.0": + "integrity" "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==" + "resolved" "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz" + "version" "2.0.1" + +"human-signals@^2.1.0": + "integrity" "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" + "version" "2.1.0" + +"human-signals@^3.0.1": + "integrity" "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==" + "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz" + "version" "3.0.1" + +"husky@^8.0.1": + "integrity" "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==" + "resolved" "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz" + "version" "8.0.1" + +"iconv-lite@^0.6.3": + "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + "version" "0.6.3" + dependencies: + "safer-buffer" ">= 2.1.2 < 3.0.0" + +"identity-obj-proxy@^3.0.0": + "integrity" "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==" + "resolved" "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "harmony-reflect" "^1.4.6" + +"ignore@^5.2.0": + "integrity" "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" + "version" "5.2.0" + +"immer@^9.0.7": + "integrity" "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==" + "resolved" "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz" + "version" "9.0.15" + +"import-fresh@^3.0.0", "import-fresh@^3.2.1": + "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==" + "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "parent-module" "^1.0.0" + "resolve-from" "^4.0.0" + +"import-local@^3.0.2": + "integrity" "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==" + "resolved" "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "pkg-dir" "^4.2.0" + "resolve-cwd" "^3.0.0" + +"imurmurhash@^0.1.4": + "integrity" "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + "version" "0.1.4" + +"indent-string@^4.0.0": + "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + "version" "4.0.0" + +"inflight@^1.0.4": + "integrity" "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" + "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "once" "^1.3.0" + "wrappy" "1" + +"inherits@2": + "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + "version" "2.0.4" + +"inline-style-parser@0.1.1": + "integrity" "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + "resolved" "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz" + "version" "0.1.1" + +"internal-slot@^1.0.3": + "integrity" "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==" + "resolved" "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "get-intrinsic" "^1.1.0" + "has" "^1.0.3" + "side-channel" "^1.0.4" + +"is-alphabetical@^1.0.0": + "integrity" "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" + "resolved" "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz" + "version" "1.0.4" + +"is-alphabetical@^2.0.0": + "integrity" "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==" + "resolved" "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz" + "version" "2.0.1" + +"is-alphanumerical@^1.0.0": + "integrity" "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==" + "resolved" "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "is-alphabetical" "^1.0.0" + "is-decimal" "^1.0.0" + +"is-alphanumerical@^2.0.0": + "integrity" "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==" + "resolved" "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "is-alphabetical" "^2.0.0" + "is-decimal" "^2.0.0" + +"is-arrayish@^0.2.1": + "integrity" "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + "version" "0.2.1" + +"is-bigint@^1.0.1": + "integrity" "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==" + "resolved" "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "has-bigints" "^1.0.1" + +"is-binary-path@~2.1.0": + "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==" + "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "binary-extensions" "^2.0.0" + +"is-boolean-object@^1.1.0": + "integrity" "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==" + "resolved" "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "call-bind" "^1.0.2" + "has-tostringtag" "^1.0.0" + +"is-buffer@^2.0.0": + "integrity" "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" + "version" "2.0.5" + +"is-callable@^1.1.4", "is-callable@^1.2.4": + "integrity" "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz" + "version" "1.2.4" + +"is-core-module@^2.8.1", "is-core-module@^2.9.0": + "integrity" "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==" + "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz" + "version" "2.9.0" + dependencies: + "has" "^1.0.3" + +"is-date-object@^1.0.1": + "integrity" "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==" + "resolved" "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "has-tostringtag" "^1.0.0" + +"is-decimal@^1.0.0": + "integrity" "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" + "resolved" "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz" + "version" "1.0.4" + +"is-decimal@^2.0.0": + "integrity" "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==" + "resolved" "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz" + "version" "2.0.1" + +"is-extendable@^0.1.0": + "integrity" "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + "version" "0.1.1" + +"is-extglob@^2.1.1": + "integrity" "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + "version" "2.1.1" + +"is-fullwidth-code-point@^3.0.0": + "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + "version" "3.0.0" + +"is-fullwidth-code-point@^4.0.0": + "integrity" "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" + "version" "4.0.0" + +"is-generator-fn@^2.0.0": + "integrity" "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" + "resolved" "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" + "version" "2.1.0" + +"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@^4.0.3", "is-glob@~4.0.1": + "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "is-extglob" "^2.1.1" + +"is-hexadecimal@^1.0.0": + "integrity" "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" + "resolved" "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz" + "version" "1.0.4" + +"is-hexadecimal@^2.0.0": + "integrity" "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==" + "resolved" "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz" + "version" "2.0.1" + +"is-negative-zero@^2.0.2": + "integrity" "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + "resolved" "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" + "version" "2.0.2" + +"is-number-object@^1.0.4": + "integrity" "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==" + "resolved" "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" + "version" "1.0.7" + dependencies: + "has-tostringtag" "^1.0.0" + +"is-number@^7.0.0": + "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + "version" "7.0.0" + +"is-plain-obj@^2.0.0": + "integrity" "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" + "version" "2.1.0" + +"is-plain-obj@^4.0.0": + "integrity" "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" + "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz" + "version" "4.1.0" + +"is-property@^1.0.2": + "integrity" "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==" + "resolved" "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz" + "version" "1.0.2" + +"is-reference@^3.0.0": + "integrity" "sha512-Eo1W3wUoHWoCoVM4GVl/a+K0IgiqE5aIo4kJABFyMum1ZORlPkC+UC357sSQUL5w5QCE5kCC9upl75b7+7CY/Q==" + "resolved" "https://registry.npmjs.org/is-reference/-/is-reference-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "@types/estree" "*" + +"is-regex@^1.1.4": + "integrity" "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==" + "resolved" "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + "version" "1.1.4" + dependencies: + "call-bind" "^1.0.2" + "has-tostringtag" "^1.0.0" + +"is-shared-array-buffer@^1.0.2": + "integrity" "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==" + "resolved" "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "call-bind" "^1.0.2" + +"is-stream@^2.0.0": + "integrity" "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + "version" "2.0.1" + +"is-stream@^3.0.0": + "integrity" "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" + "version" "3.0.0" + +"is-string@^1.0.5", "is-string@^1.0.7": + "integrity" "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==" + "resolved" "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + "version" "1.0.7" + dependencies: + "has-tostringtag" "^1.0.0" + +"is-symbol@^1.0.2", "is-symbol@^1.0.3": + "integrity" "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==" + "resolved" "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "has-symbols" "^1.0.2" + +"is-weakref@^1.0.2": + "integrity" "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==" + "resolved" "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "call-bind" "^1.0.2" + +"isexe@^2.0.0": + "integrity" "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + "version" "2.0.0" + +"istanbul-lib-coverage@^3.0.0", "istanbul-lib-coverage@^3.2.0": + "integrity" "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" + "resolved" "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" + "version" "3.2.0" + +"istanbul-lib-instrument@^5.0.4", "istanbul-lib-instrument@^5.1.0": + "integrity" "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==" + "resolved" "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + "istanbul-lib-coverage" "^3.2.0" + "semver" "^6.3.0" + +"istanbul-lib-report@^3.0.0": + "integrity" "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==" + "resolved" "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "istanbul-lib-coverage" "^3.0.0" + "make-dir" "^3.0.0" + "supports-color" "^7.1.0" + +"istanbul-lib-source-maps@^4.0.0": + "integrity" "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==" + "resolved" "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "debug" "^4.1.1" + "istanbul-lib-coverage" "^3.0.0" + "source-map" "^0.6.1" + +"istanbul-reports@^3.1.3": + "integrity" "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==" + "resolved" "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz" + "version" "3.1.4" + dependencies: + "html-escaper" "^2.0.0" + "istanbul-lib-report" "^3.0.0" + +"jest-changed-files@^28.0.2": + "integrity" "sha512-QX9u+5I2s54ZnGoMEjiM2WeBvJR2J7w/8ZUmH2um/WLAuGAYFQcsVXY9+1YL6k0H/AGUdH8pXUAv6erDqEsvIA==" + "resolved" "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.0.2.tgz" + "version" "28.0.2" + dependencies: + "execa" "^5.0.0" + "throat" "^6.0.1" + +"jest-circus@^28.1.2": + "integrity" "sha512-E2vdPIJG5/69EMpslFhaA46WkcrN74LI5V/cSJ59L7uS8UNoXbzTxmwhpi9XrIL3zqvMt5T0pl5k2l2u2GwBNQ==" + "resolved" "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.2.tgz" + "version" "28.1.2" + dependencies: + "@jest/environment" "^28.1.2" + "@jest/expect" "^28.1.2" + "@jest/test-result" "^28.1.1" + "@jest/types" "^28.1.1" + "@types/node" "*" + "chalk" "^4.0.0" + "co" "^4.6.0" + "dedent" "^0.7.0" + "is-generator-fn" "^2.0.0" + "jest-each" "^28.1.1" + "jest-matcher-utils" "^28.1.1" + "jest-message-util" "^28.1.1" + "jest-runtime" "^28.1.2" + "jest-snapshot" "^28.1.2" + "jest-util" "^28.1.1" + "pretty-format" "^28.1.1" + "slash" "^3.0.0" + "stack-utils" "^2.0.3" + "throat" "^6.0.1" + +"jest-cli@^28.1.2": + "integrity" "sha512-l6eoi5Do/IJUXAFL9qRmDiFpBeEJAnjJb1dcd9i/VWfVWbp3mJhuH50dNtX67Ali4Ecvt4eBkWb4hXhPHkAZTw==" + "resolved" "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.2.tgz" + "version" "28.1.2" + dependencies: + "@jest/core" "^28.1.2" + "@jest/test-result" "^28.1.1" + "@jest/types" "^28.1.1" + "chalk" "^4.0.0" + "exit" "^0.1.2" + "graceful-fs" "^4.2.9" + "import-local" "^3.0.2" + "jest-config" "^28.1.2" + "jest-util" "^28.1.1" + "jest-validate" "^28.1.1" + "prompts" "^2.0.1" + "yargs" "^17.3.1" + +"jest-config@^28.1.2": + "integrity" "sha512-g6EfeRqddVbjPVBVY4JWpUY4IvQoFRIZcv4V36QkqzE0IGhEC/VkugFeBMAeUE7PRgC8KJF0yvJNDeQRbamEVA==" + "resolved" "https://registry.npmjs.org/jest-config/-/jest-config-28.1.2.tgz" + "version" "28.1.2" + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^28.1.1" + "@jest/types" "^28.1.1" + "babel-jest" "^28.1.2" + "chalk" "^4.0.0" + "ci-info" "^3.2.0" + "deepmerge" "^4.2.2" + "glob" "^7.1.3" + "graceful-fs" "^4.2.9" + "jest-circus" "^28.1.2" + "jest-environment-node" "^28.1.2" + "jest-get-type" "^28.0.2" + "jest-regex-util" "^28.0.2" + "jest-resolve" "^28.1.1" + "jest-runner" "^28.1.2" + "jest-util" "^28.1.1" + "jest-validate" "^28.1.1" + "micromatch" "^4.0.4" + "parse-json" "^5.2.0" + "pretty-format" "^28.1.1" + "slash" "^3.0.0" + "strip-json-comments" "^3.1.1" + +"jest-diff@^28.1.1": + "integrity" "sha512-/MUUxeR2fHbqHoMMiffe/Afm+U8U4olFRJ0hiVG2lZatPJcnGxx292ustVu7bULhjV65IYMxRdploAKLbcrsyg==" + "resolved" "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "chalk" "^4.0.0" + "diff-sequences" "^28.1.1" + "jest-get-type" "^28.0.2" + "pretty-format" "^28.1.1" + +"jest-docblock@^28.1.1": + "integrity" "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==" + "resolved" "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "detect-newline" "^3.0.0" + +"jest-each@^28.1.1": + "integrity" "sha512-A042rqh17ZvEhRceDMi784ppoXR7MWGDEKTXEZXb4svt0eShMZvijGxzKsx+yIjeE8QYmHPrnHiTSQVhN4nqaw==" + "resolved" "https://registry.npmjs.org/jest-each/-/jest-each-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "@jest/types" "^28.1.1" + "chalk" "^4.0.0" + "jest-get-type" "^28.0.2" + "jest-util" "^28.1.1" + "pretty-format" "^28.1.1" + +"jest-environment-node@^28.1.2": + "integrity" "sha512-oYsZz9Qw27XKmOgTtnl0jW7VplJkN2oeof+SwAwKFQacq3CLlG9u4kTGuuLWfvu3J7bVutWlrbEQMOCL/jughw==" + "resolved" "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.2.tgz" + "version" "28.1.2" + dependencies: + "@jest/environment" "^28.1.2" + "@jest/fake-timers" "^28.1.2" + "@jest/types" "^28.1.1" + "@types/node" "*" + "jest-mock" "^28.1.1" + "jest-util" "^28.1.1" + +"jest-get-type@^28.0.2": + "integrity" "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==" + "resolved" "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz" + "version" "28.0.2" + +"jest-haste-map@^28.1.1": + "integrity" "sha512-ZrRSE2o3Ezh7sb1KmeLEZRZ4mgufbrMwolcFHNRSjKZhpLa8TdooXOOFlSwoUzlbVs1t0l7upVRW2K7RWGHzbQ==" + "resolved" "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "@jest/types" "^28.1.1" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + "anymatch" "^3.0.3" + "fb-watchman" "^2.0.0" + "graceful-fs" "^4.2.9" + "jest-regex-util" "^28.0.2" + "jest-util" "^28.1.1" + "jest-worker" "^28.1.1" + "micromatch" "^4.0.4" + "walker" "^1.0.8" + optionalDependencies: + "fsevents" "^2.3.2" + +"jest-leak-detector@^28.1.1": + "integrity" "sha512-4jvs8V8kLbAaotE+wFR7vfUGf603cwYtFf1/PYEsyX2BAjSzj8hQSVTP6OWzseTl0xL6dyHuKs2JAks7Pfubmw==" + "resolved" "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "jest-get-type" "^28.0.2" + "pretty-format" "^28.1.1" + +"jest-matcher-utils@^28.0.0", "jest-matcher-utils@^28.1.1": + "integrity" "sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw==" + "resolved" "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "chalk" "^4.0.0" + "jest-diff" "^28.1.1" + "jest-get-type" "^28.0.2" + "pretty-format" "^28.1.1" + +"jest-message-util@^28.1.1": + "integrity" "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==" + "resolved" "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^28.1.1" + "@types/stack-utils" "^2.0.0" + "chalk" "^4.0.0" + "graceful-fs" "^4.2.9" + "micromatch" "^4.0.4" + "pretty-format" "^28.1.1" + "slash" "^3.0.0" + "stack-utils" "^2.0.3" + +"jest-mock@^28.1.1": + "integrity" "sha512-bDCb0FjfsmKweAvE09dZT59IMkzgN0fYBH6t5S45NoJfd2DHkS3ySG2K+hucortryhO3fVuXdlxWcbtIuV/Skw==" + "resolved" "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "@jest/types" "^28.1.1" + "@types/node" "*" + +"jest-pnp-resolver@^1.2.2": + "integrity" "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==" + "resolved" "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz" + "version" "1.2.2" + +"jest-regex-util@^28.0.0", "jest-regex-util@^28.0.2": + "integrity" "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==" + "resolved" "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz" + "version" "28.0.2" + +"jest-resolve-dependencies@^28.1.2": + "integrity" "sha512-OXw4vbOZuyRTBi3tapWBqdyodU+T33ww5cPZORuTWkg+Y8lmsxQlVu3MWtJh6NMlKRTHQetF96yGPv01Ye7Mbg==" + "resolved" "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.2.tgz" + "version" "28.1.2" + dependencies: + "jest-regex-util" "^28.0.2" + "jest-snapshot" "^28.1.2" + +"jest-resolve@*", "jest-resolve@^28.1.1": + "integrity" "sha512-/d1UbyUkf9nvsgdBildLe6LAD4DalgkgZcKd0nZ8XUGPyA/7fsnaQIlKVnDiuUXv/IeZhPEDrRJubVSulxrShA==" + "resolved" "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "chalk" "^4.0.0" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^28.1.1" + "jest-pnp-resolver" "^1.2.2" + "jest-util" "^28.1.1" + "jest-validate" "^28.1.1" + "resolve" "^1.20.0" + "resolve.exports" "^1.1.0" + "slash" "^3.0.0" + +"jest-runner@^28.1.2": + "integrity" "sha512-6/k3DlAsAEr5VcptCMdhtRhOoYClZQmxnVMZvZ/quvPGRpN7OBQYPIC32tWSgOnbgqLXNs5RAniC+nkdFZpD4A==" + "resolved" "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.2.tgz" + "version" "28.1.2" + dependencies: + "@jest/console" "^28.1.1" + "@jest/environment" "^28.1.2" + "@jest/test-result" "^28.1.1" + "@jest/transform" "^28.1.2" + "@jest/types" "^28.1.1" + "@types/node" "*" + "chalk" "^4.0.0" + "emittery" "^0.10.2" + "graceful-fs" "^4.2.9" + "jest-docblock" "^28.1.1" + "jest-environment-node" "^28.1.2" + "jest-haste-map" "^28.1.1" + "jest-leak-detector" "^28.1.1" + "jest-message-util" "^28.1.1" + "jest-resolve" "^28.1.1" + "jest-runtime" "^28.1.2" + "jest-util" "^28.1.1" + "jest-watcher" "^28.1.1" + "jest-worker" "^28.1.1" + "source-map-support" "0.5.13" + "throat" "^6.0.1" + +"jest-runtime@^28.1.2": + "integrity" "sha512-i4w93OsWzLOeMXSi9epmakb2+3z0AchZtUQVF1hesBmcQQy4vtaql5YdVe9KexdJaVRyPDw8DoBR0j3lYsZVYw==" + "resolved" "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.2.tgz" + "version" "28.1.2" + dependencies: + "@jest/environment" "^28.1.2" + "@jest/fake-timers" "^28.1.2" + "@jest/globals" "^28.1.2" + "@jest/source-map" "^28.1.2" + "@jest/test-result" "^28.1.1" + "@jest/transform" "^28.1.2" + "@jest/types" "^28.1.1" + "chalk" "^4.0.0" + "cjs-module-lexer" "^1.0.0" + "collect-v8-coverage" "^1.0.0" + "execa" "^5.0.0" + "glob" "^7.1.3" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^28.1.1" + "jest-message-util" "^28.1.1" + "jest-mock" "^28.1.1" + "jest-regex-util" "^28.0.2" + "jest-resolve" "^28.1.1" + "jest-snapshot" "^28.1.2" + "jest-util" "^28.1.1" + "slash" "^3.0.0" + "strip-bom" "^4.0.0" + +"jest-snapshot@^28.1.2": + "integrity" "sha512-wzrieFttZYfLvrCVRJxX+jwML2YTArOUqFpCoSVy1QUapx+LlV9uLbV/mMEhYj4t7aMeE9aSQFHSvV/oNoDAMA==" + "resolved" "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.2.tgz" + "version" "28.1.2" + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^28.1.1" + "@jest/transform" "^28.1.2" + "@jest/types" "^28.1.1" + "@types/babel__traverse" "^7.0.6" + "@types/prettier" "^2.1.5" + "babel-preset-current-node-syntax" "^1.0.0" + "chalk" "^4.0.0" + "expect" "^28.1.1" + "graceful-fs" "^4.2.9" + "jest-diff" "^28.1.1" + "jest-get-type" "^28.0.2" + "jest-haste-map" "^28.1.1" + "jest-matcher-utils" "^28.1.1" + "jest-message-util" "^28.1.1" + "jest-util" "^28.1.1" + "natural-compare" "^1.4.0" + "pretty-format" "^28.1.1" + "semver" "^7.3.5" + +"jest-util@^28.1.1": + "integrity" "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==" + "resolved" "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "@jest/types" "^28.1.1" + "@types/node" "*" + "chalk" "^4.0.0" + "ci-info" "^3.2.0" + "graceful-fs" "^4.2.9" + "picomatch" "^2.2.3" + +"jest-validate@^28.1.1": + "integrity" "sha512-Kpf6gcClqFCIZ4ti5++XemYJWUPCFUW+N2gknn+KgnDf549iLul3cBuKVe1YcWRlaF8tZV8eJCap0eECOEE3Ug==" + "resolved" "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "@jest/types" "^28.1.1" + "camelcase" "^6.2.0" + "chalk" "^4.0.0" + "jest-get-type" "^28.0.2" + "leven" "^3.1.0" + "pretty-format" "^28.1.1" + +"jest-watch-typeahead@^1.1.0": + "integrity" "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==" + "resolved" "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "ansi-escapes" "^4.3.1" + "chalk" "^4.0.0" + "jest-regex-util" "^28.0.0" + "jest-watcher" "^28.0.0" + "slash" "^4.0.0" + "string-length" "^5.0.1" + "strip-ansi" "^7.0.1" + +"jest-watcher@^28.0.0", "jest-watcher@^28.1.1": + "integrity" "sha512-RQIpeZ8EIJMxbQrXpJQYIIlubBnB9imEHsxxE41f54ZwcqWLysL/A0ZcdMirf+XsMn3xfphVQVV4EW0/p7i7Ug==" + "resolved" "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "@jest/test-result" "^28.1.1" + "@jest/types" "^28.1.1" + "@types/node" "*" + "ansi-escapes" "^4.2.1" + "chalk" "^4.0.0" + "emittery" "^0.10.2" + "jest-util" "^28.1.1" + "string-length" "^4.0.1" + +"jest-worker@^27.4.5": + "integrity" "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==" + "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" + "version" "27.5.1" + dependencies: + "@types/node" "*" + "merge-stream" "^2.0.0" + "supports-color" "^8.0.0" + +"jest-worker@^28.1.1": + "integrity" "sha512-Au7slXB08C6h+xbJPp7VIb6U0XX5Kc9uel/WFc6/rcTzGiaVCBRngBExSYuXSLFPULPSYU3cJ3ybS988lNFQhQ==" + "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "@types/node" "*" + "merge-stream" "^2.0.0" + "supports-color" "^8.0.0" + +"jest@^27.0.0 || ^28.0.0", "jest@^28.1.2": + "integrity" "sha512-Tuf05DwLeCh2cfWCQbcz9UxldoDyiR1E9Igaei5khjonKncYdc6LDfynKCEWozK0oLE3GD+xKAo2u8x/0s6GOg==" + "resolved" "https://registry.npmjs.org/jest/-/jest-28.1.2.tgz" + "version" "28.1.2" + dependencies: + "@jest/core" "^28.1.2" + "@jest/types" "^28.1.1" + "import-local" "^3.0.2" + "jest-cli" "^28.1.2" + +"js-tokens@^3.0.0 || ^4.0.0", "js-tokens@^4.0.0": + "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + "version" "4.0.0" + +"js-yaml@^3.13.1": + "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + "version" "3.14.1" + dependencies: + "argparse" "^1.0.7" + "esprima" "^4.0.0" + +"js-yaml@^4.0.0": + "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "argparse" "^2.0.1" + +"js-yaml@^4.1.0": + "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "argparse" "^2.0.1" + +"jsesc@^2.5.1": + "integrity" "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + "version" "2.5.2" + +"json-parse-even-better-errors@^2.3.0", "json-parse-even-better-errors@^2.3.1": + "integrity" "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "resolved" "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + "version" "2.3.1" + +"json-schema-traverse@^0.4.1": + "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + "version" "0.4.1" + +"json-stable-stringify-without-jsonify@^1.0.1": + "integrity" "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + "version" "1.0.1" + +"json5@^1.0.1": + "integrity" "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==" + "resolved" "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "minimist" "^1.2.0" + +"json5@^2.2.1": + "integrity" "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz" + "version" "2.2.1" + +"jsx-ast-utils@^2.4.1 || ^3.0.0", "jsx-ast-utils@^3.3.1": + "integrity" "sha512-pxrjmNpeRw5wwVeWyEAk7QJu2GnBO3uzPFmHCKJJFPKK2Cy0cWL23krGtLdnMmbIi6/FjlrQpPyfQI19ByPOhQ==" + "resolved" "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.1.tgz" + "version" "3.3.1" + dependencies: + "array-includes" "^3.1.5" + "object.assign" "^4.1.2" + +"kind-of@^6.0.0", "kind-of@^6.0.2": + "integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + "version" "6.0.3" + +"kleur@^3.0.3": + "integrity" "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + "resolved" "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" + "version" "3.0.3" + +"kleur@^4.0.3": + "integrity" "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==" + "resolved" "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz" + "version" "4.1.5" + +"language-subtag-registry@~0.3.2": + "integrity" "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==" + "resolved" "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz" + "version" "0.3.21" + +"language-tags@^1.0.5": + "integrity" "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==" + "resolved" "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "language-subtag-registry" "~0.3.2" + +"leven@^3.1.0": + "integrity" "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + "resolved" "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" + "version" "3.1.0" + +"levn@^0.4.1": + "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==" + "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + "version" "0.4.1" + dependencies: + "prelude-ls" "^1.2.1" + "type-check" "~0.4.0" + +"lilconfig@^2.0.5", "lilconfig@2.0.5": + "integrity" "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==" + "resolved" "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz" + "version" "2.0.5" + +"lines-and-columns@^1.1.6": + "integrity" "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "resolved" "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + "version" "1.2.4" + +"lint-staged@^13.0.3": + "integrity" "sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==" + "resolved" "https://registry.npmjs.org/lint-staged/-/lint-staged-13.0.3.tgz" + "version" "13.0.3" + dependencies: + "cli-truncate" "^3.1.0" + "colorette" "^2.0.17" + "commander" "^9.3.0" + "debug" "^4.3.4" + "execa" "^6.1.0" + "lilconfig" "2.0.5" + "listr2" "^4.0.5" + "micromatch" "^4.0.5" + "normalize-path" "^3.0.0" + "object-inspect" "^1.12.2" + "pidtree" "^0.6.0" + "string-argv" "^0.3.1" + "yaml" "^2.1.1" + +"listr2@^4.0.5": + "integrity" "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==" + "resolved" "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz" + "version" "4.0.5" + dependencies: + "cli-truncate" "^2.1.0" + "colorette" "^2.0.16" + "log-update" "^4.0.0" + "p-map" "^4.0.0" + "rfdc" "^1.3.0" + "rxjs" "^7.5.5" + "through" "^2.3.8" + "wrap-ansi" "^7.0.0" + +"loader-runner@^4.2.0": + "integrity" "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" + "resolved" "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" + "version" "4.3.0" + +"locate-path@^2.0.0": + "integrity" "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "p-locate" "^2.0.0" + "path-exists" "^3.0.0" + +"locate-path@^5.0.0": + "integrity" "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "p-locate" "^4.1.0" + +"lodash.castarray@^4.4.0": + "integrity" "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==" + "resolved" "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz" + "version" "4.4.0" + +"lodash.isplainobject@^4.0.6": + "integrity" "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + "resolved" "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" + "version" "4.0.6" + +"lodash.merge@^4.6.2": + "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + "version" "4.6.2" + +"log-update@^4.0.0": + "integrity" "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==" + "resolved" "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "ansi-escapes" "^4.3.0" + "cli-cursor" "^3.1.0" + "slice-ansi" "^4.0.0" + "wrap-ansi" "^6.2.0" + +"long@^4.0.0": + "integrity" "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + "resolved" "https://registry.npmjs.org/long/-/long-4.0.0.tgz" + "version" "4.0.0" + +"longest-streak@^3.0.0": + "integrity" "sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==" + "resolved" "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.1.tgz" + "version" "3.0.1" + +"loose-envify@^1.1.0", "loose-envify@^1.4.0": + "integrity" "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==" + "resolved" "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "js-tokens" "^3.0.0 || ^4.0.0" + +"lru-cache@^4.1.3": + "integrity" "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz" + "version" "4.1.5" + dependencies: + "pseudomap" "^1.0.2" + "yallist" "^2.1.2" + +"lru-cache@^6.0.0": + "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "yallist" "^4.0.0" + +"lz-string@^1.4.4": + "integrity" "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==" + "resolved" "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz" + "version" "1.4.4" + +"make-dir@^3.0.0": + "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "semver" "^6.0.0" + +"makeerror@1.0.12": + "integrity" "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==" + "resolved" "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" + "version" "1.0.12" + dependencies: + "tmpl" "1.0.5" + +"markdown-extensions@^1.0.0": + "integrity" "sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==" + "resolved" "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-1.1.1.tgz" + "version" "1.1.1" + +"markdown-table@^3.0.0": + "integrity" "sha512-y8j3a5/DkJCmS5x4dMCQL+OR0+2EAq3DOtio1COSHsmW2BGXnNCK3v12hJt1LrUz5iZH5g0LmuYOjDdI+czghA==" + "resolved" "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.2.tgz" + "version" "3.0.2" + +"mdast-util-definitions@^5.0.0": + "integrity" "sha512-rQ+Gv7mHttxHOBx2dkF4HWTg+EE+UR78ptQWDylzPKaQuVGdG4HIoY3SrS/pCp80nZ04greFvXbVFHT+uf0JVQ==" + "resolved" "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + "unist-util-visit" "^4.0.0" + +"mdast-util-find-and-replace@^2.0.0": + "integrity" "sha512-bz8hUWkMX7UcasORORcyBEsTKJ+dBiFwRPrm43hHC9NMRylIMLbfO5rwfeCN+UtY4AAi7s8WqXftb9eX6ZsqCg==" + "resolved" "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "escape-string-regexp" "^5.0.0" + "unist-util-is" "^5.0.0" + "unist-util-visit-parents" "^5.0.0" + +"mdast-util-from-markdown@^1.0.0": + "integrity" "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==" + "resolved" "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + "decode-named-character-reference" "^1.0.0" + "mdast-util-to-string" "^3.1.0" + "micromark" "^3.0.0" + "micromark-util-decode-numeric-character-reference" "^1.0.0" + "micromark-util-decode-string" "^1.0.0" + "micromark-util-normalize-identifier" "^1.0.0" + "micromark-util-symbol" "^1.0.0" + "micromark-util-types" "^1.0.0" + "unist-util-stringify-position" "^3.0.0" + "uvu" "^0.5.0" + +"mdast-util-gfm-autolink-literal@^1.0.0": + "integrity" "sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg==" + "resolved" "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "@types/mdast" "^3.0.0" + "ccount" "^2.0.0" + "mdast-util-find-and-replace" "^2.0.0" + "micromark-util-character" "^1.0.0" + +"mdast-util-gfm-footnote@^1.0.0": + "integrity" "sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw==" + "resolved" "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "@types/mdast" "^3.0.0" + "mdast-util-to-markdown" "^1.3.0" + "micromark-util-normalize-identifier" "^1.0.0" + +"mdast-util-gfm-strikethrough@^1.0.0": + "integrity" "sha512-zKJbEPe+JP6EUv0mZ0tQUyLQOC+FADt0bARldONot/nefuISkaZFlmVK4tU6JgfyZGrky02m/I6PmehgAgZgqg==" + "resolved" "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "@types/mdast" "^3.0.0" + "mdast-util-to-markdown" "^1.3.0" + +"mdast-util-gfm-table@^1.0.0": + "integrity" "sha512-aEuoPwZyP4iIMkf2cLWXxx3EQ6Bmh2yKy9MVCg4i6Sd3cX80dcLEfXO/V4ul3pGH9czBK4kp+FAl+ZHmSUt9/w==" + "resolved" "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "markdown-table" "^3.0.0" + "mdast-util-from-markdown" "^1.0.0" + "mdast-util-to-markdown" "^1.3.0" + +"mdast-util-gfm-task-list-item@^1.0.0": + "integrity" "sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA==" + "resolved" "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "@types/mdast" "^3.0.0" + "mdast-util-to-markdown" "^1.3.0" + +"mdast-util-gfm@^2.0.0": + "integrity" "sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==" + "resolved" "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "mdast-util-from-markdown" "^1.0.0" + "mdast-util-gfm-autolink-literal" "^1.0.0" + "mdast-util-gfm-footnote" "^1.0.0" + "mdast-util-gfm-strikethrough" "^1.0.0" + "mdast-util-gfm-table" "^1.0.0" + "mdast-util-gfm-task-list-item" "^1.0.0" + "mdast-util-to-markdown" "^1.0.0" + +"mdast-util-mdx-expression@^1.0.0": + "integrity" "sha512-BtQwyalaq6jRjx0pagtuAwGrmzL1yInrfA4EJv7GOoiPOUbR4gr6h65I+G3WTh1/Cag2Eda4ip400Ch6CFmWiA==" + "resolved" "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.2.1.tgz" + "version" "1.2.1" + dependencies: + "@types/estree-jsx" "^0.0.1" + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + "mdast-util-from-markdown" "^1.0.0" + "mdast-util-to-markdown" "^1.0.0" + +"mdast-util-mdx-jsx@^2.0.0": + "integrity" "sha512-oPC7/smPBf7vxnvIYH5y3fPo2lw1rdrswFfSb4i0GTAXRUQv7JUU/t/hbp07dgGdUFTSDOHm5DNamhNg/s2Hrg==" + "resolved" "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "@types/estree-jsx" "^0.0.1" + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + "ccount" "^2.0.0" + "mdast-util-to-markdown" "^1.3.0" + "parse-entities" "^4.0.0" + "stringify-entities" "^4.0.0" + "unist-util-remove-position" "^4.0.0" + "unist-util-stringify-position" "^3.0.0" + "vfile-message" "^3.0.0" + +"mdast-util-mdx@^2.0.0": + "integrity" "sha512-M09lW0CcBT1VrJUaF/PYxemxxHa7SLDHdSn94Q9FhxjCQfuW7nMAWKWimTmA3OyDMSTH981NN1csW1X+HPSluw==" + "resolved" "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "mdast-util-mdx-expression" "^1.0.0" + "mdast-util-mdx-jsx" "^2.0.0" + "mdast-util-mdxjs-esm" "^1.0.0" + +"mdast-util-mdxjs-esm@^1.0.0": + "integrity" "sha512-IPpX9GBzAIbIRCjbyeLDpMhACFb0wxTIujuR3YElB8LWbducUdMgRJuqs/Vg8xQ1bIAMm7lw8L+YNtua0xKXRw==" + "resolved" "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "@types/estree-jsx" "^0.0.1" + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + "mdast-util-from-markdown" "^1.0.0" + "mdast-util-to-markdown" "^1.0.0" + +"mdast-util-to-hast@^12.1.0": + "integrity" "sha512-qE09zD6ylVP14jV4mjLIhDBOrpFdShHZcEsYvvKGABlr9mGbV7mTlRWdoFxL/EYSTNDiC9GZXy7y8Shgb9Dtzw==" + "resolved" "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.1.1.tgz" + "version" "12.1.1" + dependencies: + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + "@types/mdurl" "^1.0.0" + "mdast-util-definitions" "^5.0.0" + "mdurl" "^1.0.0" + "micromark-util-sanitize-uri" "^1.0.0" + "unist-builder" "^3.0.0" + "unist-util-generated" "^2.0.0" + "unist-util-position" "^4.0.0" + "unist-util-visit" "^4.0.0" + +"mdast-util-to-markdown@^1.0.0", "mdast-util-to-markdown@^1.3.0": + "integrity" "sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==" + "resolved" "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + "longest-streak" "^3.0.0" + "mdast-util-to-string" "^3.0.0" + "micromark-util-decode-string" "^1.0.0" + "unist-util-visit" "^4.0.0" + "zwitch" "^2.0.0" + +"mdast-util-to-string@^3.0.0", "mdast-util-to-string@^3.1.0": + "integrity" "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==" + "resolved" "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz" + "version" "3.1.0" + +"mdurl@^1.0.0": + "integrity" "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + "resolved" "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz" + "version" "1.0.1" + +"mdx-prism@^0.3.4": + "integrity" "sha512-Ijy/BB0NINK5Vn6WgOATgX75q6JEdWcGZuXtpePoGiILbjEWFiOkacTdGDpu+VGTrxu0nszlX2Spkf0bhC5O6A==" + "resolved" "https://registry.npmjs.org/mdx-prism/-/mdx-prism-0.3.4.tgz" + "version" "0.3.4" + dependencies: + "hast-util-to-string" "^1.0.0" + "parse-numeric-range" "^0.0.2" + "refractor" "3.3.0" + "rehype" "^11.0.0" + "rehype-parse" "^7.0.1" + "unified" "^9.2.1" + "unist-util-visit" "^1.1.3" + +"merge-stream@^2.0.0": + "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + "version" "2.0.0" + +"merge2@^1.3.0", "merge2@^1.4.1": + "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + "version" "1.4.1" + +"micromark-core-commonmark@^1.0.0", "micromark-core-commonmark@^1.0.1": + "integrity" "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==" + "resolved" "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "decode-named-character-reference" "^1.0.0" + "micromark-factory-destination" "^1.0.0" + "micromark-factory-label" "^1.0.0" + "micromark-factory-space" "^1.0.0" + "micromark-factory-title" "^1.0.0" + "micromark-factory-whitespace" "^1.0.0" + "micromark-util-character" "^1.0.0" + "micromark-util-chunked" "^1.0.0" + "micromark-util-classify-character" "^1.0.0" + "micromark-util-html-tag-name" "^1.0.0" + "micromark-util-normalize-identifier" "^1.0.0" + "micromark-util-resolve-all" "^1.0.0" + "micromark-util-subtokenize" "^1.0.0" + "micromark-util-symbol" "^1.0.0" + "micromark-util-types" "^1.0.1" + "uvu" "^0.5.0" + +"micromark-extension-gfm-autolink-literal@^1.0.0": + "integrity" "sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==" + "resolved" "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "micromark-util-character" "^1.0.0" + "micromark-util-sanitize-uri" "^1.0.0" + "micromark-util-symbol" "^1.0.0" + "micromark-util-types" "^1.0.0" + "uvu" "^0.5.0" + +"micromark-extension-gfm-footnote@^1.0.0": + "integrity" "sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==" + "resolved" "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "micromark-core-commonmark" "^1.0.0" + "micromark-factory-space" "^1.0.0" + "micromark-util-character" "^1.0.0" + "micromark-util-normalize-identifier" "^1.0.0" + "micromark-util-sanitize-uri" "^1.0.0" + "micromark-util-symbol" "^1.0.0" + "micromark-util-types" "^1.0.0" + "uvu" "^0.5.0" + +"micromark-extension-gfm-strikethrough@^1.0.0": + "integrity" "sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==" + "resolved" "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "micromark-util-chunked" "^1.0.0" + "micromark-util-classify-character" "^1.0.0" + "micromark-util-resolve-all" "^1.0.0" + "micromark-util-symbol" "^1.0.0" + "micromark-util-types" "^1.0.0" + "uvu" "^0.5.0" + +"micromark-extension-gfm-table@^1.0.0": + "integrity" "sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==" + "resolved" "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "micromark-factory-space" "^1.0.0" + "micromark-util-character" "^1.0.0" + "micromark-util-symbol" "^1.0.0" + "micromark-util-types" "^1.0.0" + "uvu" "^0.5.0" + +"micromark-extension-gfm-tagfilter@^1.0.0": + "integrity" "sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==" + "resolved" "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "micromark-util-types" "^1.0.0" + +"micromark-extension-gfm-task-list-item@^1.0.0": + "integrity" "sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==" + "resolved" "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "micromark-factory-space" "^1.0.0" + "micromark-util-character" "^1.0.0" + "micromark-util-symbol" "^1.0.0" + "micromark-util-types" "^1.0.0" + "uvu" "^0.5.0" + +"micromark-extension-gfm@^2.0.0": + "integrity" "sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==" + "resolved" "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "micromark-extension-gfm-autolink-literal" "^1.0.0" + "micromark-extension-gfm-footnote" "^1.0.0" + "micromark-extension-gfm-strikethrough" "^1.0.0" + "micromark-extension-gfm-table" "^1.0.0" + "micromark-extension-gfm-tagfilter" "^1.0.0" + "micromark-extension-gfm-task-list-item" "^1.0.0" + "micromark-util-combine-extensions" "^1.0.0" + "micromark-util-types" "^1.0.0" + +"micromark-extension-mdx-expression@^1.0.0": + "integrity" "sha512-TjYtjEMszWze51NJCZmhv7MEBcgYRgb3tJeMAJ+HQCAaZHHRBaDCccqQzGizR/H4ODefP44wRTgOn2vE5I6nZA==" + "resolved" "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "micromark-factory-mdx-expression" "^1.0.0" + "micromark-factory-space" "^1.0.0" + "micromark-util-character" "^1.0.0" + "micromark-util-events-to-acorn" "^1.0.0" + "micromark-util-symbol" "^1.0.0" + "micromark-util-types" "^1.0.0" + "uvu" "^0.5.0" + +"micromark-extension-mdx-jsx@^1.0.0": + "integrity" "sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==" + "resolved" "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "@types/acorn" "^4.0.0" + "estree-util-is-identifier-name" "^2.0.0" + "micromark-factory-mdx-expression" "^1.0.0" + "micromark-factory-space" "^1.0.0" + "micromark-util-character" "^1.0.0" + "micromark-util-symbol" "^1.0.0" + "micromark-util-types" "^1.0.0" + "uvu" "^0.5.0" + "vfile-message" "^3.0.0" + +"micromark-extension-mdx-md@^1.0.0": + "integrity" "sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==" + "resolved" "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "micromark-util-types" "^1.0.0" + +"micromark-extension-mdxjs-esm@^1.0.0": + "integrity" "sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==" + "resolved" "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "micromark-core-commonmark" "^1.0.0" + "micromark-util-character" "^1.0.0" + "micromark-util-events-to-acorn" "^1.0.0" + "micromark-util-symbol" "^1.0.0" + "micromark-util-types" "^1.0.0" + "unist-util-position-from-estree" "^1.1.0" + "uvu" "^0.5.0" + "vfile-message" "^3.0.0" + +"micromark-extension-mdxjs@^1.0.0": + "integrity" "sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==" + "resolved" "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "acorn" "^8.0.0" + "acorn-jsx" "^5.0.0" + "micromark-extension-mdx-expression" "^1.0.0" + "micromark-extension-mdx-jsx" "^1.0.0" + "micromark-extension-mdx-md" "^1.0.0" + "micromark-extension-mdxjs-esm" "^1.0.0" + "micromark-util-combine-extensions" "^1.0.0" + "micromark-util-types" "^1.0.0" + +"micromark-factory-destination@^1.0.0": + "integrity" "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==" + "resolved" "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "micromark-util-character" "^1.0.0" + "micromark-util-symbol" "^1.0.0" + "micromark-util-types" "^1.0.0" + +"micromark-factory-label@^1.0.0": + "integrity" "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==" + "resolved" "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "micromark-util-character" "^1.0.0" + "micromark-util-symbol" "^1.0.0" + "micromark-util-types" "^1.0.0" + "uvu" "^0.5.0" + +"micromark-factory-mdx-expression@^1.0.0": + "integrity" "sha512-WRQIc78FV7KrCfjsEf/sETopbYjElh3xAmNpLkd1ODPqxEngP42eVRGbiPEQWpRV27LzqW+XVTvQAMIIRLPnNA==" + "resolved" "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "micromark-factory-space" "^1.0.0" + "micromark-util-character" "^1.0.0" + "micromark-util-events-to-acorn" "^1.0.0" + "micromark-util-symbol" "^1.0.0" + "micromark-util-types" "^1.0.0" + "unist-util-position-from-estree" "^1.0.0" + "uvu" "^0.5.0" + "vfile-message" "^3.0.0" + +"micromark-factory-space@^1.0.0": + "integrity" "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==" + "resolved" "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "micromark-util-character" "^1.0.0" + "micromark-util-types" "^1.0.0" + +"micromark-factory-title@^1.0.0": + "integrity" "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==" + "resolved" "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "micromark-factory-space" "^1.0.0" + "micromark-util-character" "^1.0.0" + "micromark-util-symbol" "^1.0.0" + "micromark-util-types" "^1.0.0" + "uvu" "^0.5.0" + +"micromark-factory-whitespace@^1.0.0": + "integrity" "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==" + "resolved" "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "micromark-factory-space" "^1.0.0" + "micromark-util-character" "^1.0.0" + "micromark-util-symbol" "^1.0.0" + "micromark-util-types" "^1.0.0" + +"micromark-util-character@^1.0.0": + "integrity" "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==" + "resolved" "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "micromark-util-symbol" "^1.0.0" + "micromark-util-types" "^1.0.0" + +"micromark-util-chunked@^1.0.0": + "integrity" "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==" + "resolved" "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "micromark-util-symbol" "^1.0.0" + +"micromark-util-classify-character@^1.0.0": + "integrity" "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==" + "resolved" "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "micromark-util-character" "^1.0.0" + "micromark-util-symbol" "^1.0.0" + "micromark-util-types" "^1.0.0" + +"micromark-util-combine-extensions@^1.0.0": + "integrity" "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==" + "resolved" "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "micromark-util-chunked" "^1.0.0" + "micromark-util-types" "^1.0.0" + +"micromark-util-decode-numeric-character-reference@^1.0.0": + "integrity" "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==" + "resolved" "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "micromark-util-symbol" "^1.0.0" + +"micromark-util-decode-string@^1.0.0": + "integrity" "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==" + "resolved" "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "decode-named-character-reference" "^1.0.0" + "micromark-util-character" "^1.0.0" + "micromark-util-decode-numeric-character-reference" "^1.0.0" + "micromark-util-symbol" "^1.0.0" + +"micromark-util-encode@^1.0.0": + "integrity" "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==" + "resolved" "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz" + "version" "1.0.1" + +"micromark-util-events-to-acorn@^1.0.0": + "integrity" "sha512-hB8HzidNt/Us5q2BvqXj8eeEm0U9rRfnZxcA9T65JRUMAY4MbfJRAFm7m9fXMAdSHJiVPmajsp8/rp6/FlHL8A==" + "resolved" "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "@types/acorn" "^4.0.0" + "@types/estree" "^0.0.51" + "estree-util-visit" "^1.0.0" + "micromark-util-types" "^1.0.0" + "uvu" "^0.5.0" + "vfile-location" "^4.0.0" + "vfile-message" "^3.0.0" + +"micromark-util-html-tag-name@^1.0.0": + "integrity" "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==" + "resolved" "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz" + "version" "1.1.0" + +"micromark-util-normalize-identifier@^1.0.0": + "integrity" "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==" + "resolved" "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "micromark-util-symbol" "^1.0.0" + +"micromark-util-resolve-all@^1.0.0": + "integrity" "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==" + "resolved" "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "micromark-util-types" "^1.0.0" + +"micromark-util-sanitize-uri@^1.0.0": + "integrity" "sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==" + "resolved" "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "micromark-util-character" "^1.0.0" + "micromark-util-encode" "^1.0.0" + "micromark-util-symbol" "^1.0.0" + +"micromark-util-subtokenize@^1.0.0": + "integrity" "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==" + "resolved" "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "micromark-util-chunked" "^1.0.0" + "micromark-util-symbol" "^1.0.0" + "micromark-util-types" "^1.0.0" + "uvu" "^0.5.0" + +"micromark-util-symbol@^1.0.0": + "integrity" "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==" + "resolved" "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz" + "version" "1.0.1" + +"micromark-util-types@^1.0.0", "micromark-util-types@^1.0.1": + "integrity" "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==" + "resolved" "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz" + "version" "1.0.2" + +"micromark@^3.0.0": + "integrity" "sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg==" + "resolved" "https://registry.npmjs.org/micromark/-/micromark-3.0.10.tgz" + "version" "3.0.10" + dependencies: + "@types/debug" "^4.0.0" + "debug" "^4.0.0" + "decode-named-character-reference" "^1.0.0" + "micromark-core-commonmark" "^1.0.1" + "micromark-factory-space" "^1.0.0" + "micromark-util-character" "^1.0.0" + "micromark-util-chunked" "^1.0.0" + "micromark-util-combine-extensions" "^1.0.0" + "micromark-util-decode-numeric-character-reference" "^1.0.0" + "micromark-util-encode" "^1.0.0" + "micromark-util-normalize-identifier" "^1.0.0" + "micromark-util-resolve-all" "^1.0.0" + "micromark-util-sanitize-uri" "^1.0.0" + "micromark-util-subtokenize" "^1.0.0" + "micromark-util-symbol" "^1.0.0" + "micromark-util-types" "^1.0.1" + "uvu" "^0.5.0" + +"micromatch@^4.0.4", "micromatch@^4.0.5": + "integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + "version" "4.0.5" + dependencies: + "braces" "^3.0.2" + "picomatch" "^2.3.1" + +"mime-db@1.52.0": + "integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + "version" "1.52.0" + +"mime-types@^2.1.12", "mime-types@^2.1.27": + "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" + "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + "version" "2.1.35" + dependencies: + "mime-db" "1.52.0" + +"mimic-fn@^2.1.0": + "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + "version" "2.1.0" + +"mimic-fn@^4.0.0": + "integrity" "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" + "version" "4.0.0" + +"minimatch@^3.0.4", "minimatch@^3.1.1", "minimatch@^3.1.2": + "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "brace-expansion" "^1.1.7" + +"minimist@^1.2.0", "minimist@^1.2.6": + "integrity" "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" + "version" "1.2.6" + +"mri@^1.1.0": + "integrity" "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==" + "resolved" "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz" + "version" "1.2.0" + +"ms@^2.1.1", "ms@2.1.2": + "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + "version" "2.1.2" + +"ms@2.0.0": + "integrity" "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + "version" "2.0.0" + +"mysql2@^2.3.3": + "integrity" "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==" + "resolved" "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz" + "version" "2.3.3" + dependencies: + "denque" "^2.0.1" + "generate-function" "^2.3.1" + "iconv-lite" "^0.6.3" + "long" "^4.0.0" + "lru-cache" "^6.0.0" + "named-placeholders" "^1.1.2" + "seq-queue" "^0.0.5" + "sqlstring" "^2.3.2" + +"named-placeholders@^1.1.2": + "integrity" "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==" + "resolved" "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "lru-cache" "^4.1.3" + +"nanoid@^3.1.30", "nanoid@^3.3.4": + "integrity" "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz" + "version" "3.3.4" + +"natural-compare@^1.4.0": + "integrity" "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + "version" "1.4.0" + +"neo-async@^2.6.2": + "integrity" "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "resolved" "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + "version" "2.6.2" + +"next-mdx-remote@^4.0.3": + "integrity" "sha512-jKpZyBN0cOUmfBRId5iGpplWOO79hV2A5qfo17VG4Avn0G5PEs6vR9vf9IngKEw1G4aVqzhCs3j9CEbMFzZoAg==" + "resolved" "https://registry.npmjs.org/next-mdx-remote/-/next-mdx-remote-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "@mdx-js/mdx" "^2.0.0" + "@mdx-js/react" "^2.0.0" + "vfile" "^5.3.0" + "vfile-matter" "^3.0.1" + +"next-themes@^0.2.0": + "integrity" "sha512-myhpDL4vadBD9YDSHiewqvzorGzB03N84e+3LxCwHRlM/hiBOaW+UsKsQojQAzC7fdcJA0l2ppveXcYaVV+hxQ==" + "resolved" "https://registry.npmjs.org/next-themes/-/next-themes-0.2.0.tgz" + "version" "0.2.0" + +"next@*", "next@^12.2.0": + "integrity" "sha512-B4j7D3SHYopLYx6/Ark0fenwIar9tEaZZFAaxmKjgcMMexhVJzB3jt7X+6wcdXPPMeUD6r09weUtnDpjox/vIA==" + "resolved" "https://registry.npmjs.org/next/-/next-12.2.0.tgz" + "version" "12.2.0" + dependencies: + "@next/env" "12.2.0" + "@swc/helpers" "0.4.2" + "caniuse-lite" "^1.0.30001332" + "postcss" "8.4.5" + "styled-jsx" "5.0.2" + "use-sync-external-store" "1.1.0" + optionalDependencies: + "@next/swc-android-arm-eabi" "12.2.0" + "@next/swc-android-arm64" "12.2.0" + "@next/swc-darwin-arm64" "12.2.0" + "@next/swc-darwin-x64" "12.2.0" + "@next/swc-freebsd-x64" "12.2.0" + "@next/swc-linux-arm-gnueabihf" "12.2.0" + "@next/swc-linux-arm64-gnu" "12.2.0" + "@next/swc-linux-arm64-musl" "12.2.0" + "@next/swc-linux-x64-gnu" "12.2.0" + "@next/swc-linux-x64-musl" "12.2.0" + "@next/swc-win32-arm64-msvc" "12.2.0" + "@next/swc-win32-ia32-msvc" "12.2.0" + "@next/swc-win32-x64-msvc" "12.2.0" + +"node-int64@^0.4.0": + "integrity" "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + "resolved" "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + "version" "0.4.0" + +"node-releases@^2.0.5": + "integrity" "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" + "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz" + "version" "2.0.5" + +"normalize-path@^3.0.0", "normalize-path@~3.0.0": + "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + "version" "3.0.0" + +"normalize-range@^0.1.2": + "integrity" "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" + "resolved" "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" + "version" "0.1.2" + +"npm-run-path@^4.0.1": + "integrity" "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "path-key" "^3.0.0" + +"npm-run-path@^5.1.0": + "integrity" "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "path-key" "^4.0.0" + +"object-assign@^4.1.1": + "integrity" "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + "version" "4.1.1" + +"object-hash@^3.0.0": + "integrity" "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" + "resolved" "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz" + "version" "3.0.0" + +"object-inspect@^1.12.0", "object-inspect@^1.12.2", "object-inspect@^1.9.0": + "integrity" "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" + "version" "1.12.2" + +"object-keys@^1.1.1": + "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + "version" "1.1.1" + +"object.assign@^4.1.2": + "integrity" "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==" + "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "call-bind" "^1.0.0" + "define-properties" "^1.1.3" + "has-symbols" "^1.0.1" + "object-keys" "^1.1.1" + +"object.entries@^1.1.5": + "integrity" "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==" + "resolved" "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + "es-abstract" "^1.19.1" + +"object.fromentries@^2.0.5": + "integrity" "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==" + "resolved" "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz" + "version" "2.0.5" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + "es-abstract" "^1.19.1" + +"object.hasown@^1.1.1": + "integrity" "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==" + "resolved" "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "define-properties" "^1.1.4" + "es-abstract" "^1.19.5" + +"object.values@^1.1.5": + "integrity" "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==" + "resolved" "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + "es-abstract" "^1.19.1" + +"once@^1.3.0": + "integrity" "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" + "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "wrappy" "1" + +"onetime@^5.1.0", "onetime@^5.1.2": + "integrity" "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "mimic-fn" "^2.1.0" + +"onetime@^6.0.0": + "integrity" "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "mimic-fn" "^4.0.0" + +"optionator@^0.9.1": + "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==" + "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + "version" "0.9.1" + dependencies: + "deep-is" "^0.1.3" + "fast-levenshtein" "^2.0.6" + "levn" "^0.4.1" + "prelude-ls" "^1.2.1" + "type-check" "^0.4.0" + "word-wrap" "^1.2.3" + +"p-limit@^1.1.0": + "integrity" "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "p-try" "^1.0.0" + +"p-limit@^2.2.0": + "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "p-try" "^2.0.0" + +"p-locate@^2.0.0": + "integrity" "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "p-limit" "^1.1.0" + +"p-locate@^4.1.0": + "integrity" "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "p-limit" "^2.2.0" + +"p-map@^4.0.0": + "integrity" "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==" + "resolved" "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "aggregate-error" "^3.0.0" + +"p-try@^1.0.0": + "integrity" "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==" + "resolved" "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" + "version" "1.0.0" + +"p-try@^2.0.0": + "integrity" "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "resolved" "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + "version" "2.2.0" + +"parent-module@^1.0.0": + "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" + "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "callsites" "^3.0.0" + +"parse-entities@^2.0.0": + "integrity" "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==" + "resolved" "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "character-entities" "^1.0.0" + "character-entities-legacy" "^1.0.0" + "character-reference-invalid" "^1.0.0" + "is-alphanumerical" "^1.0.0" + "is-decimal" "^1.0.0" + "is-hexadecimal" "^1.0.0" + +"parse-entities@^4.0.0": + "integrity" "sha512-5nk9Fn03x3rEhGaX1FU6IDwG/k+GxLXlFAkgrbM1asuAFl3BhdQWvASaIsmwWypRNcZKHPYnIuOSfIWEyEQnPQ==" + "resolved" "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "@types/unist" "^2.0.0" + "character-entities" "^2.0.0" + "character-entities-legacy" "^3.0.0" + "character-reference-invalid" "^2.0.0" + "decode-named-character-reference" "^1.0.0" + "is-alphanumerical" "^2.0.0" + "is-decimal" "^2.0.0" + "is-hexadecimal" "^2.0.0" + +"parse-json@^5.2.0": + "integrity" "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==" + "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "@babel/code-frame" "^7.0.0" + "error-ex" "^1.3.1" + "json-parse-even-better-errors" "^2.3.0" + "lines-and-columns" "^1.1.6" + +"parse-numeric-range@^0.0.2": + "integrity" "sha512-m6xRZuda9v6EGdnPMIkcyB3/NpdgbMJG8yPAQ0Mwm1nGlm2OE/o6YS0EAxAqv6u4/PKQPp6BNoylZnRb2U2/OA==" + "resolved" "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-0.0.2.tgz" + "version" "0.0.2" + +"parse5@^6.0.0": + "integrity" "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + "resolved" "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" + "version" "6.0.1" + +"path-exists@^3.0.0": + "integrity" "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + "version" "3.0.0" + +"path-exists@^4.0.0": + "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + "version" "4.0.0" + +"path-is-absolute@^1.0.0": + "integrity" "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "version" "1.0.1" + +"path-key@^3.0.0", "path-key@^3.1.0": + "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + "version" "3.1.1" + +"path-key@^4.0.0": + "integrity" "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz" + "version" "4.0.0" + +"path-parse@^1.0.7": + "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + "version" "1.0.7" + +"path-type@^4.0.0": + "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + "version" "4.0.0" + +"periscopic@^3.0.0": + "integrity" "sha512-SFx68DxCv0Iyo6APZuw/AKewkkThGwssmU0QWtTlvov3VAtPX+QJ4CadwSaz8nrT5jPIuxdvJWB4PnD2KNDxQg==" + "resolved" "https://registry.npmjs.org/periscopic/-/periscopic-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "estree-walker" "^3.0.0" + "is-reference" "^3.0.0" + +"picocolors@^1.0.0": + "integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + "version" "1.0.0" + +"picomatch@^2.0.4", "picomatch@^2.2.1", "picomatch@^2.2.3", "picomatch@^2.3.1": + "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + "version" "2.3.1" + +"pidtree@^0.6.0": + "integrity" "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==" + "resolved" "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz" + "version" "0.6.0" + +"pify@^2.3.0": + "integrity" "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + "version" "2.3.0" + +"pirates@^4.0.4": + "integrity" "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" + "resolved" "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz" + "version" "4.0.5" + +"pkg-dir@^4.2.0": + "integrity" "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==" + "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "find-up" "^4.0.0" + +"postcss-import@^14.1.0": + "integrity" "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==" + "resolved" "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz" + "version" "14.1.0" + dependencies: + "postcss-value-parser" "^4.0.0" + "read-cache" "^1.0.0" + "resolve" "^1.1.7" + +"postcss-js@^4.0.0": + "integrity" "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==" + "resolved" "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "camelcase-css" "^2.0.1" + +"postcss-load-config@^3.1.4": + "integrity" "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==" + "resolved" "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz" + "version" "3.1.4" + dependencies: + "lilconfig" "^2.0.5" + "yaml" "^1.10.2" + +"postcss-nested@5.0.6": + "integrity" "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==" + "resolved" "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz" + "version" "5.0.6" + dependencies: + "postcss-selector-parser" "^6.0.6" + +"postcss-selector-parser@^6.0.10", "postcss-selector-parser@^6.0.6": + "integrity" "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==" + "resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz" + "version" "6.0.10" + dependencies: + "cssesc" "^3.0.0" + "util-deprecate" "^1.0.2" + +"postcss-value-parser@^4.0.0", "postcss-value-parser@^4.2.0": + "integrity" "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" + "version" "4.2.0" + +"postcss@^8.0.0", "postcss@^8.1.0", "postcss@^8.2.14", "postcss@^8.3.3", "postcss@^8.4.14", "postcss@>=8.0.9": + "integrity" "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==" + "resolved" "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz" + "version" "8.4.14" + dependencies: + "nanoid" "^3.3.4" + "picocolors" "^1.0.0" + "source-map-js" "^1.0.2" + +"postcss@8.4.5": + "integrity" "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==" + "resolved" "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz" + "version" "8.4.5" + dependencies: + "nanoid" "^3.1.30" + "picocolors" "^1.0.0" + "source-map-js" "^1.0.1" + +"prelude-ls@^1.2.1": + "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + "version" "1.2.1" + +"prettier@^2.7.1": + "integrity" "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==" + "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" + "version" "2.7.1" + +"pretty-format@^27.0.2": + "integrity" "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==" + "resolved" "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz" + "version" "27.5.1" + dependencies: + "ansi-regex" "^5.0.1" + "ansi-styles" "^5.0.0" + "react-is" "^17.0.1" + +"pretty-format@^28.0.0": + "integrity" "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==" + "resolved" "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "@jest/schemas" "^28.0.2" + "ansi-regex" "^5.0.1" + "ansi-styles" "^5.0.0" + "react-is" "^18.0.0" + +"pretty-format@^28.1.1": + "integrity" "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==" + "resolved" "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz" + "version" "28.1.1" + dependencies: + "@jest/schemas" "^28.0.2" + "ansi-regex" "^5.0.1" + "ansi-styles" "^5.0.0" + "react-is" "^18.0.0" + +"prismjs@~1.23.0": + "integrity" "sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA==" + "resolved" "https://registry.npmjs.org/prismjs/-/prismjs-1.23.0.tgz" + "version" "1.23.0" + optionalDependencies: + "clipboard" "^2.0.0" + +"prompts@^2.0.1": + "integrity" "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==" + "resolved" "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "kleur" "^3.0.3" + "sisteransi" "^1.0.5" + +"prop-types@^15.8.1": + "integrity" "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==" + "resolved" "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" + "version" "15.8.1" + dependencies: + "loose-envify" "^1.4.0" + "object-assign" "^4.1.1" + "react-is" "^16.13.1" + +"property-information@^5.0.0": + "integrity" "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==" + "resolved" "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz" + "version" "5.6.0" + dependencies: + "xtend" "^4.0.0" + +"property-information@^6.0.0": + "integrity" "sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w==" + "resolved" "https://registry.npmjs.org/property-information/-/property-information-6.1.1.tgz" + "version" "6.1.1" + +"pseudomap@^1.0.2": + "integrity" "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + "resolved" "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz" + "version" "1.0.2" + +"punycode@^2.1.0": + "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + "version" "2.1.1" + +"queue-microtask@^1.2.2": + "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + "version" "1.2.3" + +"quick-lru@^5.1.1": + "integrity" "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" + "resolved" "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" + "version" "5.1.1" + +"randombytes@^2.1.0": + "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" + "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "safe-buffer" "^5.1.0" + +"react-confirm-alert@^3.0.2": + "integrity" "sha512-4yjYlhURDc1P6c/9A20C0w4EHx9kik9kHjjgmuIGD0F5sSQcmSstU1qwPrkFL3gJaMKWunckEtTw/7cARW3ZFg==" + "resolved" "https://registry.npmjs.org/react-confirm-alert/-/react-confirm-alert-3.0.2.tgz" + "version" "3.0.2" + +"react-dom@*", "react-dom@^16 || ^17 || ^18", "react-dom@^16.8 || ^17.0 || ^18.0", "react-dom@^17.0.2 || ^18.0.0-0", "react-dom@^18.0.0", "react-dom@^18.2.0", "react-dom@>=10.0.0", "react-dom@>=16", "react-dom@>=16.x <=18.x": + "integrity" "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==" + "resolved" "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" + "version" "18.2.0" + dependencies: + "loose-envify" "^1.1.0" + "scheduler" "^0.23.0" + +"react-hook-form@^7.33.1": + "integrity" "sha512-ydTfTxEJdvgjCZBj5DDXRc58oTEfnFupEwwTAQ9FSKzykEJkX+3CiAkGtAMiZG7IPWHuzgT6AOBfogiKhUvKgg==" + "resolved" "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.33.1.tgz" + "version" "7.33.1" + +"react-is@^16.13.1": + "integrity" "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "resolved" "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" + "version" "16.13.1" + +"react-is@^16.7.0": + "integrity" "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "resolved" "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" + "version" "16.13.1" + +"react-is@^17.0.1": + "integrity" "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + "resolved" "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" + "version" "17.0.2" + +"react-is@^18.0.0": + "integrity" "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + "resolved" "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" + "version" "18.2.0" + +"react-redux@^7.2.1 || ^8.0.2", "react-redux@^8.0.2": + "integrity" "sha512-nBwiscMw3NoP59NFCXFf02f8xdo+vSHT/uZ1ldDwF7XaTpzm+Phk97VT4urYBl5TYAPNVaFm12UHAEyzkpNzRA==" + "resolved" "https://registry.npmjs.org/react-redux/-/react-redux-8.0.2.tgz" + "version" "8.0.2" + dependencies: + "@babel/runtime" "^7.12.1" + "@types/hoist-non-react-statics" "^3.3.1" + "@types/use-sync-external-store" "^0.0.3" + "hoist-non-react-statics" "^3.3.2" + "react-is" "^18.0.0" + "use-sync-external-store" "^1.0.0" + +"react-toastify@^9.0.5": + "integrity" "sha512-dszPCeQINY+Nm6HmsiAXT/7wsazPqv0S/RuhIYLAW+fTKcd3T1iRjZG0XqrN9nvAzqaE5J6uxMaiBrOevxjY8g==" + "resolved" "https://registry.npmjs.org/react-toastify/-/react-toastify-9.0.5.tgz" + "version" "9.0.5" + dependencies: + "clsx" "^1.1.1" + +"react@*", "react@^16 || ^17 || ^18", "react@^16.8 || ^17.0 || ^18.0", "react@^16.8.0 || ^17 || ^18", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.9.0 || ^17.0.0 || ^18", "react@^17.0.2 || ^18.0.0-0", "react@^18.0.0", "react@^18.2.0", "react@>= 16", "react@>= 16.8.0 || 17.x.x || ^18.0.0-0", "react@>=16", "react@>=16.x <=18.x", "react@>=18.0.0": + "integrity" "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==" + "resolved" "https://registry.npmjs.org/react/-/react-18.2.0.tgz" + "version" "18.2.0" + dependencies: + "loose-envify" "^1.1.0" + +"read-cache@^1.0.0": + "integrity" "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==" + "resolved" "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "pify" "^2.3.0" + +"readdirp@~3.6.0": + "integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==" + "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "picomatch" "^2.2.1" + +"redux-thunk@^2.4.1": + "integrity" "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==" + "resolved" "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz" + "version" "2.4.1" + +"redux@^4", "redux@^4.1.2": + "integrity" "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==" + "resolved" "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "@babel/runtime" "^7.9.2" + +"refractor@3.3.0": + "integrity" "sha512-c/jEhQjk1NDyTF3hMgtu8PigaqkWUv+c5+mBffZCTnjyrNSJkG+0eoTOJV/u0XCTuPfaFzJyj6MM4HnF0Wr27Q==" + "resolved" "https://registry.npmjs.org/refractor/-/refractor-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "hastscript" "^6.0.0" + "parse-entities" "^2.0.0" + "prismjs" "~1.23.0" + +"regenerator-runtime@^0.13.4": + "integrity" "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" + "version" "0.13.9" + +"regexp.prototype.flags@^1.4.1", "regexp.prototype.flags@^1.4.3": + "integrity" "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==" + "resolved" "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" + "version" "1.4.3" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + "functions-have-names" "^1.2.2" + +"regexpp@^3.2.0": + "integrity" "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" + "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" + "version" "3.2.0" + +"rehype-autolink-headings@^6.1.1": + "integrity" "sha512-NMYzZIsHM3sA14nC5rAFuUPIOfg+DFmf9EY1YMhaNlB7+3kK/ZlE6kqPfuxr1tsJ1XWkTrMtMoyHosU70d35mA==" + "resolved" "https://registry.npmjs.org/rehype-autolink-headings/-/rehype-autolink-headings-6.1.1.tgz" + "version" "6.1.1" + dependencies: + "@types/hast" "^2.0.0" + "extend" "^3.0.0" + "hast-util-has-property" "^2.0.0" + "hast-util-heading-rank" "^2.0.0" + "hast-util-is-element" "^2.0.0" + "unified" "^10.0.0" + "unist-util-visit" "^4.0.0" + +"rehype-parse@^7.0.0", "rehype-parse@^7.0.1": + "integrity" "sha512-fOiR9a9xH+Le19i4fGzIEowAbwG7idy2Jzs4mOrFWBSJ0sNUgy0ev871dwWnbOo371SjgjG4pwzrbgSVrKxecw==" + "resolved" "https://registry.npmjs.org/rehype-parse/-/rehype-parse-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "hast-util-from-parse5" "^6.0.0" + "parse5" "^6.0.0" + +"rehype-parse@^8.0.0": + "integrity" "sha512-MJJKONunHjoTh4kc3dsM1v3C9kGrrxvA3U8PxZlP2SjH8RNUSrb+lF7Y0KVaUDnGH2QZ5vAn7ulkiajM9ifuqg==" + "resolved" "https://registry.npmjs.org/rehype-parse/-/rehype-parse-8.0.4.tgz" + "version" "8.0.4" + dependencies: + "@types/hast" "^2.0.0" + "hast-util-from-parse5" "^7.0.0" + "parse5" "^6.0.0" + "unified" "^10.0.0" + +"rehype-slug@^5.0.1": + "integrity" "sha512-X5v3wV/meuOX9NFcGhJvUpEjIvQl2gDvjg3z40RVprYFt7q3th4qMmYLULiu3gXvbNX1ppx+oaa6JyY1W67pTA==" + "resolved" "https://registry.npmjs.org/rehype-slug/-/rehype-slug-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "@types/hast" "^2.0.0" + "github-slugger" "^1.1.1" + "hast-util-has-property" "^2.0.0" + "hast-util-heading-rank" "^2.0.0" + "hast-util-to-string" "^2.0.0" + "unified" "^10.0.0" + "unist-util-visit" "^4.0.0" + +"rehype-stringify@^8.0.0": + "integrity" "sha512-VkIs18G0pj2xklyllrPSvdShAV36Ff3yE5PUO9u36f6+2qJFnn22Z5gKwBOwgXviux4UC7K+/j13AnZfPICi/g==" + "resolved" "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-8.0.0.tgz" + "version" "8.0.0" + dependencies: + "hast-util-to-html" "^7.1.1" + +"rehype-stringify@^9.0.0": + "integrity" "sha512-kWiZ1bgyWlgOxpqD5HnxShKAdXtb2IUljn3hQAhySeak6IOQPPt6DeGnsIh4ixm7yKJWzm8TXFuC/lPfcWHJqw==" + "resolved" "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.3.tgz" + "version" "9.0.3" + dependencies: + "@types/hast" "^2.0.0" + "hast-util-to-html" "^8.0.0" + "unified" "^10.0.0" + +"rehype@^11.0.0": + "integrity" "sha512-qXqRqiCFJD5CJ61CSJuNImTFrm3zVkOU9XywHDwrUuvWN74MWt72KJ67c5CM5x8g0vGcOkRVCrYj85vqkmHulQ==" + "resolved" "https://registry.npmjs.org/rehype/-/rehype-11.0.0.tgz" + "version" "11.0.0" + dependencies: + "rehype-parse" "^7.0.0" + "rehype-stringify" "^8.0.0" + "unified" "^9.0.0" + +"rehype@^12.0.1": + "integrity" "sha512-ey6kAqwLM3X6QnMDILJthGvG1m1ULROS9NT4uG9IDCuv08SFyLlreSuvOa//DgEvbXx62DS6elGVqusWhRUbgw==" + "resolved" "https://registry.npmjs.org/rehype/-/rehype-12.0.1.tgz" + "version" "12.0.1" + dependencies: + "@types/hast" "^2.0.0" + "rehype-parse" "^8.0.0" + "rehype-stringify" "^9.0.0" + "unified" "^10.0.0" + +"remark-code-titles@^0.1.2": + "integrity" "sha512-KsHQbaI4FX8Ozxqk7YErxwmBiveUqloKuVqyPG2YPLHojpgomodWgRfG4B+bOtmn/5bfJ8khw4rR0lvgVFl2Uw==" + "resolved" "https://registry.npmjs.org/remark-code-titles/-/remark-code-titles-0.1.2.tgz" + "version" "0.1.2" + dependencies: + "unist-util-visit" "^1.4.0" + +"remark-gfm@^3.0.1": + "integrity" "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==" + "resolved" "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "@types/mdast" "^3.0.0" + "mdast-util-gfm" "^2.0.0" + "micromark-extension-gfm" "^2.0.0" + "unified" "^10.0.0" + +"remark-mdx@^2.0.0": + "integrity" "sha512-npQagPdczPAv0xN9F8GSi5hJfAe/z6nBjylyfOfjLOmz086ahWrIjlk4BulRfNhA+asutqWxyuT3DFVsxiTVHA==" + "resolved" "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "mdast-util-mdx" "^2.0.0" + "micromark-extension-mdxjs" "^1.0.0" + +"remark-parse@^10.0.0": + "integrity" "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==" + "resolved" "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz" + "version" "10.0.1" + dependencies: + "@types/mdast" "^3.0.0" + "mdast-util-from-markdown" "^1.0.0" + "unified" "^10.0.0" + +"remark-rehype@^10.0.0": + "integrity" "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==" + "resolved" "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz" + "version" "10.1.0" + dependencies: + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + "mdast-util-to-hast" "^12.1.0" + "unified" "^10.0.0" + +"require-directory@^2.1.1": + "integrity" "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + "version" "2.1.1" + +"reselect@^4.1.5": + "integrity" "sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==" + "resolved" "https://registry.npmjs.org/reselect/-/reselect-4.1.6.tgz" + "version" "4.1.6" + +"resolve-cwd@^3.0.0": + "integrity" "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==" + "resolved" "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "resolve-from" "^5.0.0" + +"resolve-from@^4.0.0": + "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + "version" "4.0.0" + +"resolve-from@^5.0.0": + "integrity" "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + "version" "5.0.0" + +"resolve.exports@^1.1.0": + "integrity" "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==" + "resolved" "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz" + "version" "1.1.0" + +"resolve@^1.1.7", "resolve@^1.20.0", "resolve@^1.22.0": + "integrity" "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" + "version" "1.22.1" + dependencies: + "is-core-module" "^2.9.0" + "path-parse" "^1.0.7" + "supports-preserve-symlinks-flag" "^1.0.0" + +"resolve@^2.0.0-next.3": + "integrity" "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz" + "version" "2.0.0-next.4" + dependencies: + "is-core-module" "^2.9.0" + "path-parse" "^1.0.7" + "supports-preserve-symlinks-flag" "^1.0.0" + +"restore-cursor@^3.1.0": + "integrity" "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==" + "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "onetime" "^5.1.0" + "signal-exit" "^3.0.2" + +"reusify@^1.0.4": + "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + "version" "1.0.4" + +"rfdc@^1.3.0": + "integrity" "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + "resolved" "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" + "version" "1.3.0" + +"rimraf@^3.0.0", "rimraf@^3.0.2": + "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "glob" "^7.1.3" + +"run-parallel@^1.1.9": + "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" + "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "queue-microtask" "^1.2.2" + +"rxjs@^7.5.5": + "integrity" "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==" + "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz" + "version" "7.5.5" + dependencies: + "tslib" "^2.1.0" + +"sade@^1.7.3": + "integrity" "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==" + "resolved" "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz" + "version" "1.8.1" + dependencies: + "mri" "^1.1.0" + +"safe-buffer@^5.1.0", "safe-buffer@~5.1.1": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" + +"safer-buffer@>= 2.1.2 < 3.0.0": + "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + "version" "2.1.2" + +"scheduler@^0.23.0": + "integrity" "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==" + "resolved" "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz" + "version" "0.23.0" + dependencies: + "loose-envify" "^1.1.0" + +"schema-utils@^3.1.0", "schema-utils@^3.1.1": + "integrity" "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "@types/json-schema" "^7.0.8" + "ajv" "^6.12.5" + "ajv-keywords" "^3.5.2" + +"section-matter@^1.0.0": + "integrity" "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==" + "resolved" "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "extend-shallow" "^2.0.1" + "kind-of" "^6.0.0" + +"select@^1.1.2": + "integrity" "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==" + "resolved" "https://registry.npmjs.org/select/-/select-1.1.2.tgz" + "version" "1.1.2" + +"semver@^6.0.0", "semver@^6.3.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^7.3.5": + "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" + "version" "7.3.7" + dependencies: + "lru-cache" "^6.0.0" + +"semver@^7.3.7": + "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" + "version" "7.3.7" + dependencies: + "lru-cache" "^6.0.0" + +"seq-queue@^0.0.5": + "integrity" "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" + "resolved" "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz" + "version" "0.0.5" + +"serialize-javascript@^6.0.0": + "integrity" "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==" + "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "randombytes" "^2.1.0" + +"shebang-command@^2.0.0": + "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "shebang-regex" "^3.0.0" + +"shebang-regex@^3.0.0": + "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + "version" "3.0.0" + +"side-channel@^1.0.4": + "integrity" "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==" + "resolved" "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "call-bind" "^1.0.0" + "get-intrinsic" "^1.0.2" + "object-inspect" "^1.9.0" + +"signal-exit@^3.0.2", "signal-exit@^3.0.3", "signal-exit@^3.0.7": + "integrity" "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + "version" "3.0.7" + +"sisteransi@^1.0.5": + "integrity" "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + "resolved" "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" + "version" "1.0.5" + +"slash@^3.0.0": + "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + "version" "3.0.0" + +"slash@^4.0.0": + "integrity" "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" + "resolved" "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" + "version" "4.0.0" + +"slice-ansi@^3.0.0": + "integrity" "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==" + "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "astral-regex" "^2.0.0" + "is-fullwidth-code-point" "^3.0.0" + +"slice-ansi@^4.0.0": + "integrity" "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==" + "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "astral-regex" "^2.0.0" + "is-fullwidth-code-point" "^3.0.0" + +"slice-ansi@^5.0.0": + "integrity" "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==" + "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "ansi-styles" "^6.0.0" + "is-fullwidth-code-point" "^4.0.0" + +"source-map-js@^1.0.1", "source-map-js@^1.0.2": + "integrity" "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + "resolved" "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" + "version" "1.0.2" + +"source-map-support@~0.5.20": + "integrity" "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + "version" "0.5.21" + dependencies: + "buffer-from" "^1.0.0" + "source-map" "^0.6.0" + +"source-map-support@0.5.13": + "integrity" "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" + "version" "0.5.13" + dependencies: + "buffer-from" "^1.0.0" + "source-map" "^0.6.0" + +"source-map@^0.6.0", "source-map@^0.6.1": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"source-map@^0.7.0": + "integrity" "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" + "version" "0.7.4" + +"space-separated-tokens@^1.0.0": + "integrity" "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" + "resolved" "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz" + "version" "1.1.5" + +"space-separated-tokens@^2.0.0": + "integrity" "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==" + "resolved" "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz" + "version" "2.0.1" + +"sprintf-js@~1.0.2": + "integrity" "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + "version" "1.0.3" + +"sqlstring@^2.3.2": + "integrity" "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==" + "resolved" "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz" + "version" "2.3.3" + +"stack-utils@^2.0.3": + "integrity" "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==" + "resolved" "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz" + "version" "2.0.5" + dependencies: + "escape-string-regexp" "^2.0.0" + +"string-argv@^0.3.1": + "integrity" "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==" + "resolved" "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" + "version" "0.3.1" + +"string-length@^4.0.1": + "integrity" "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==" + "resolved" "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "char-regex" "^1.0.2" + "strip-ansi" "^6.0.0" + +"string-length@^5.0.1": + "integrity" "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==" + "resolved" "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "char-regex" "^2.0.0" + "strip-ansi" "^7.0.1" + +"string-width@^4.1.0": + "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + "version" "4.2.3" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.1" + +"string-width@^4.2.0": + "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + "version" "4.2.3" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.1" + +"string-width@^4.2.3": + "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + "version" "4.2.3" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.1" + +"string-width@^5.0.0": + "integrity" "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "eastasianwidth" "^0.2.0" + "emoji-regex" "^9.2.2" + "strip-ansi" "^7.0.1" + +"string.prototype.matchall@^4.0.7": + "integrity" "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==" + "resolved" "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz" + "version" "4.0.7" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + "es-abstract" "^1.19.1" + "get-intrinsic" "^1.1.1" + "has-symbols" "^1.0.3" + "internal-slot" "^1.0.3" + "regexp.prototype.flags" "^1.4.1" + "side-channel" "^1.0.4" + +"string.prototype.trimend@^1.0.5": + "integrity" "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==" + "resolved" "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.4" + "es-abstract" "^1.19.5" + +"string.prototype.trimstart@^1.0.5": + "integrity" "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==" + "resolved" "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.4" + "es-abstract" "^1.19.5" + +"stringify-entities@^3.0.1": + "integrity" "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==" + "resolved" "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "character-entities-html4" "^1.0.0" + "character-entities-legacy" "^1.0.0" + "xtend" "^4.0.0" + +"stringify-entities@^4.0.0", "stringify-entities@^4.0.2": + "integrity" "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==" + "resolved" "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "character-entities-html4" "^2.0.0" + "character-entities-legacy" "^3.0.0" + +"strip-ansi@^6.0.0", "strip-ansi@^6.0.1": + "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "ansi-regex" "^5.0.1" + +"strip-ansi@^7.0.1": + "integrity" "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "ansi-regex" "^6.0.1" + +"strip-bom-string@^1.0.0": + "integrity" "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==" + "resolved" "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz" + "version" "1.0.0" + +"strip-bom@^3.0.0": + "integrity" "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" + "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + "version" "3.0.0" + +"strip-bom@^4.0.0": + "integrity" "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" + "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" + "version" "4.0.0" + +"strip-final-newline@^2.0.0": + "integrity" "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + "version" "2.0.0" + +"strip-final-newline@^3.0.0": + "integrity" "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" + "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz" + "version" "3.0.0" + +"strip-json-comments@^3.1.0", "strip-json-comments@^3.1.1": + "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + "version" "3.1.1" + +"style-to-object@^0.3.0": + "integrity" "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==" + "resolved" "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz" + "version" "0.3.0" + dependencies: + "inline-style-parser" "0.1.1" + +"styled-jsx@5.0.2": + "integrity" "sha512-LqPQrbBh3egD57NBcHET4qcgshPks+yblyhPlH2GY8oaDgKs8SK4C3dBh3oSJjgzJ3G5t1SYEZGHkP+QEpX9EQ==" + "resolved" "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.2.tgz" + "version" "5.0.2" + +"supports-color@^5.3.0": + "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + "version" "5.5.0" + dependencies: + "has-flag" "^3.0.0" + +"supports-color@^7.0.0": + "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "has-flag" "^4.0.0" + +"supports-color@^7.1.0": + "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "has-flag" "^4.0.0" + +"supports-color@^8.0.0": + "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + "version" "8.1.1" + dependencies: + "has-flag" "^4.0.0" + +"supports-hyperlinks@^2.0.0": + "integrity" "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==" + "resolved" "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "has-flag" "^4.0.0" + "supports-color" "^7.0.0" + +"supports-preserve-symlinks-flag@^1.0.0": + "integrity" "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + "resolved" "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + "version" "1.0.0" + +"tailwindcss@^3.1.4", "tailwindcss@>=3.0.0 || >= 3.0.0-alpha.1 || insiders": + "integrity" "sha512-NrxbFV4tYsga/hpWbRyUfIaBrNMXDxx5BsHgBS4v5tlyjf+sDsgBg5m9OxjrXIqAS/uR9kicxLKP+bEHI7BSeQ==" + "resolved" "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.4.tgz" + "version" "3.1.4" + dependencies: + "arg" "^5.0.2" + "chokidar" "^3.5.3" + "color-name" "^1.1.4" + "detective" "^5.2.1" + "didyoumean" "^1.2.2" + "dlv" "^1.1.3" + "fast-glob" "^3.2.11" + "glob-parent" "^6.0.2" + "is-glob" "^4.0.3" + "lilconfig" "^2.0.5" + "normalize-path" "^3.0.0" + "object-hash" "^3.0.0" + "picocolors" "^1.0.0" + "postcss" "^8.4.14" + "postcss-import" "^14.1.0" + "postcss-js" "^4.0.0" + "postcss-load-config" "^3.1.4" + "postcss-nested" "5.0.6" + "postcss-selector-parser" "^6.0.10" + "postcss-value-parser" "^4.2.0" + "quick-lru" "^5.1.1" + "resolve" "^1.22.0" + +"tapable@^2.1.1", "tapable@^2.2.0": + "integrity" "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" + "resolved" "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" + "version" "2.2.1" + +"terminal-link@^2.0.0": + "integrity" "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==" + "resolved" "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "ansi-escapes" "^4.2.1" + "supports-hyperlinks" "^2.0.0" + +"terser-webpack-plugin@^5.1.3": + "integrity" "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==" + "resolved" "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz" + "version" "5.3.3" + dependencies: + "@jridgewell/trace-mapping" "^0.3.7" + "jest-worker" "^27.4.5" + "schema-utils" "^3.1.1" + "serialize-javascript" "^6.0.0" + "terser" "^5.7.2" + +"terser@^5.7.2": + "integrity" "sha512-+ahUAE+iheqBTDxXhTisdA8hgvbEG1hHOQ9xmNjeUJSoi6DU/gMrKNcfZjHkyY6Alnuyc+ikYJaxxfHkT3+WuQ==" + "resolved" "https://registry.npmjs.org/terser/-/terser-5.14.1.tgz" + "version" "5.14.1" + dependencies: + "@jridgewell/source-map" "^0.3.2" + "acorn" "^8.5.0" + "commander" "^2.20.0" + "source-map-support" "~0.5.20" + +"test-exclude@^6.0.0": + "integrity" "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==" + "resolved" "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "@istanbuljs/schema" "^0.1.2" + "glob" "^7.1.4" + "minimatch" "^3.0.4" + +"text-table@^0.2.0": + "integrity" "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + "version" "0.2.0" + +"throat@^6.0.1": + "integrity" "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==" + "resolved" "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz" + "version" "6.0.1" + +"through@^2.3.8": + "integrity" "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + "version" "2.3.8" + +"tiny-emitter@^2.0.0": + "integrity" "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + "resolved" "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz" + "version" "2.1.0" + +"tmpl@1.0.5": + "integrity" "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + "resolved" "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" + "version" "1.0.5" + +"to-fast-properties@^2.0.0": + "integrity" "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + "version" "2.0.0" + +"to-regex-range@^5.0.1": + "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "is-number" "^7.0.0" + +"trough@^1.0.0": + "integrity" "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" + "resolved" "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz" + "version" "1.0.5" + +"trough@^2.0.0": + "integrity" "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==" + "resolved" "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz" + "version" "2.1.0" + +"tsconfig-paths@^3.14.1": + "integrity" "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==" + "resolved" "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz" + "version" "3.14.1" + dependencies: + "@types/json5" "^0.0.29" + "json5" "^1.0.1" + "minimist" "^1.2.6" + "strip-bom" "^3.0.0" + +"tslib@^1.8.1": + "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + "version" "1.14.1" + +"tslib@^2.1.0", "tslib@^2.4.0": + "integrity" "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" + "version" "2.4.0" + +"tsutils@^3.21.0": + "integrity" "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==" + "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + "version" "3.21.0" + dependencies: + "tslib" "^1.8.1" + +"type-check@^0.4.0", "type-check@~0.4.0": + "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" + "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + "version" "0.4.0" + dependencies: + "prelude-ls" "^1.2.1" + +"type-detect@4.0.8": + "integrity" "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + "resolved" "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" + "version" "4.0.8" + +"type-fest@^0.20.2": + "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + "version" "0.20.2" + +"type-fest@^0.21.3": + "integrity" "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + "version" "0.21.3" + +"typescript@^4.7.4", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=3.3.1": + "integrity" "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==" + "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz" + "version" "4.7.4" + +"unbox-primitive@^1.0.2": + "integrity" "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==" + "resolved" "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "call-bind" "^1.0.2" + "has-bigints" "^1.0.2" + "has-symbols" "^1.0.3" + "which-boxed-primitive" "^1.0.2" + +"unified@^10.0.0": + "integrity" "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==" + "resolved" "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz" + "version" "10.1.2" + dependencies: + "@types/unist" "^2.0.0" + "bail" "^2.0.0" + "extend" "^3.0.0" + "is-buffer" "^2.0.0" + "is-plain-obj" "^4.0.0" + "trough" "^2.0.0" + "vfile" "^5.0.0" + +"unified@^9.0.0", "unified@^9.2.1": + "integrity" "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==" + "resolved" "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz" + "version" "9.2.2" + dependencies: + "bail" "^1.0.0" + "extend" "^3.0.0" + "is-buffer" "^2.0.0" + "is-plain-obj" "^2.0.0" + "trough" "^1.0.0" + "vfile" "^4.0.0" + +"unist-builder@^3.0.0": + "integrity" "sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ==" + "resolved" "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "@types/unist" "^2.0.0" + +"unist-util-generated@^2.0.0": + "integrity" "sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==" + "resolved" "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.0.tgz" + "version" "2.0.0" + +"unist-util-is@^3.0.0": + "integrity" "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==" + "resolved" "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz" + "version" "3.0.0" + +"unist-util-is@^4.0.0": + "integrity" "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" + "resolved" "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz" + "version" "4.1.0" + +"unist-util-is@^5.0.0": + "integrity" "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" + "resolved" "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz" + "version" "5.1.1" + +"unist-util-position-from-estree@^1.0.0", "unist-util-position-from-estree@^1.1.0": + "integrity" "sha512-xtoY50b5+7IH8tFbkw64gisG9tMSpxDjhX9TmaJJae/XuxQ9R/Kc8Nv1eOsf43Gt4KV/LkriMy9mptDr7XLcaw==" + "resolved" "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "@types/unist" "^2.0.0" + +"unist-util-position@^4.0.0": + "integrity" "sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==" + "resolved" "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "@types/unist" "^2.0.0" + +"unist-util-remove-position@^4.0.0": + "integrity" "sha512-0yDkppiIhDlPrfHELgB+NLQD5mfjup3a8UYclHruTJWmY74je8g+CIFr79x5f6AkmzSwlvKLbs63hC0meOMowQ==" + "resolved" "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "@types/unist" "^2.0.0" + "unist-util-visit" "^4.0.0" + +"unist-util-stringify-position@^2.0.0": + "integrity" "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==" + "resolved" "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz" + "version" "2.0.3" + dependencies: + "@types/unist" "^2.0.2" + +"unist-util-stringify-position@^3.0.0": + "integrity" "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==" + "resolved" "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "@types/unist" "^2.0.0" + +"unist-util-visit-parents@^2.0.0": + "integrity" "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==" + "resolved" "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "unist-util-is" "^3.0.0" + +"unist-util-visit-parents@^5.0.0": + "integrity" "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==" + "resolved" "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "@types/unist" "^2.0.0" + "unist-util-is" "^5.0.0" + +"unist-util-visit@^1.1.3", "unist-util-visit@^1.4.0": + "integrity" "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==" + "resolved" "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz" + "version" "1.4.1" + dependencies: + "unist-util-visit-parents" "^2.0.0" + +"unist-util-visit@^4.0.0": + "integrity" "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==" + "resolved" "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "@types/unist" "^2.0.0" + "unist-util-is" "^5.0.0" + "unist-util-visit-parents" "^5.0.0" + +"update-browserslist-db@^1.0.4": + "integrity" "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==" + "resolved" "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "escalade" "^3.1.1" + "picocolors" "^1.0.0" + +"uri-js@^4.2.2": + "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" + "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + "version" "4.4.1" + dependencies: + "punycode" "^2.1.0" + +"use-sync-external-store@^1.0.0", "use-sync-external-store@1.1.0": + "integrity" "sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ==" + "resolved" "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.1.0.tgz" + "version" "1.1.0" + +"util-deprecate@^1.0.2": + "integrity" "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "version" "1.0.2" + +"uvu@^0.5.0": + "integrity" "sha512-x1CyUjcP9VKaNPhjeB3FIc/jqgLsz2Q9LFhRzUTu/jnaaHILEGNuE0XckQonl8ISLcwyk9I2EZvWlYsQnwxqvQ==" + "resolved" "https://registry.npmjs.org/uvu/-/uvu-0.5.4.tgz" + "version" "0.5.4" + dependencies: + "dequal" "^2.0.0" + "diff" "^5.0.0" + "kleur" "^4.0.3" + "sade" "^1.7.3" + +"v8-compile-cache@^2.0.3": + "integrity" "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" + "resolved" "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" + "version" "2.3.0" + +"v8-to-istanbul@^9.0.1": + "integrity" "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==" + "resolved" "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz" + "version" "9.0.1" + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + "convert-source-map" "^1.6.0" + +"vfile-location@^3.2.0": + "integrity" "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" + "resolved" "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz" + "version" "3.2.0" + +"vfile-location@^4.0.0": + "integrity" "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==" + "resolved" "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "@types/unist" "^2.0.0" + "vfile" "^5.0.0" + +"vfile-matter@^3.0.1": + "integrity" "sha512-CAAIDwnh6ZdtrqAuxdElUqQRQDQgbbIrYtDYI8gCjXS1qQ+1XdLoK8FIZWxJwn0/I+BkSSZpar3SOgjemQz4fg==" + "resolved" "https://registry.npmjs.org/vfile-matter/-/vfile-matter-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "@types/js-yaml" "^4.0.0" + "is-buffer" "^2.0.0" + "js-yaml" "^4.0.0" + +"vfile-message@^2.0.0": + "integrity" "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==" + "resolved" "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "@types/unist" "^2.0.0" + "unist-util-stringify-position" "^2.0.0" + +"vfile-message@^3.0.0": + "integrity" "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==" + "resolved" "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "@types/unist" "^2.0.0" + "unist-util-stringify-position" "^3.0.0" + +"vfile@^4.0.0": + "integrity" "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==" + "resolved" "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "@types/unist" "^2.0.0" + "is-buffer" "^2.0.0" + "unist-util-stringify-position" "^2.0.0" + "vfile-message" "^2.0.0" + +"vfile@^5.0.0", "vfile@^5.3.0": + "integrity" "sha512-KI+7cnst03KbEyN1+JE504zF5bJBZa+J+CrevLeyIMq0aPU681I2rQ5p4PlnQ6exFtWiUrg26QUdFMnAKR6PIw==" + "resolved" "https://registry.npmjs.org/vfile/-/vfile-5.3.4.tgz" + "version" "5.3.4" + dependencies: + "@types/unist" "^2.0.0" + "is-buffer" "^2.0.0" + "unist-util-stringify-position" "^3.0.0" + "vfile-message" "^3.0.0" + +"walker@^1.0.8": + "integrity" "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==" + "resolved" "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" + "version" "1.0.8" + dependencies: + "makeerror" "1.0.12" + +"watchpack@^2.3.1": + "integrity" "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==" + "resolved" "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz" + "version" "2.4.0" + dependencies: + "glob-to-regexp" "^0.4.1" + "graceful-fs" "^4.1.2" + +"web-namespaces@^1.0.0": + "integrity" "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" + "resolved" "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz" + "version" "1.1.4" + +"web-namespaces@^2.0.0": + "integrity" "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==" + "resolved" "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz" + "version" "2.0.1" + +"webpack-sources@^3.2.3": + "integrity" "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" + "resolved" "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" + "version" "3.2.3" + +"webpack@^5.1.0", "webpack@>=4": + "integrity" "sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA==" + "resolved" "https://registry.npmjs.org/webpack/-/webpack-5.73.0.tgz" + "version" "5.73.0" + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "acorn" "^8.4.1" + "acorn-import-assertions" "^1.7.6" + "browserslist" "^4.14.5" + "chrome-trace-event" "^1.0.2" + "enhanced-resolve" "^5.9.3" + "es-module-lexer" "^0.9.0" + "eslint-scope" "5.1.1" + "events" "^3.2.0" + "glob-to-regexp" "^0.4.1" + "graceful-fs" "^4.2.9" + "json-parse-even-better-errors" "^2.3.1" + "loader-runner" "^4.2.0" + "mime-types" "^2.1.27" + "neo-async" "^2.6.2" + "schema-utils" "^3.1.0" + "tapable" "^2.1.1" + "terser-webpack-plugin" "^5.1.3" + "watchpack" "^2.3.1" + "webpack-sources" "^3.2.3" + +"which-boxed-primitive@^1.0.2": + "integrity" "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==" + "resolved" "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "is-bigint" "^1.0.1" + "is-boolean-object" "^1.1.0" + "is-number-object" "^1.0.4" + "is-string" "^1.0.5" + "is-symbol" "^1.0.3" + +"which@^2.0.1": + "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" + "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "isexe" "^2.0.0" + +"word-wrap@^1.2.3": + "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + "version" "1.2.3" + +"wrap-ansi@^6.2.0": + "integrity" "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + "version" "6.2.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + +"wrap-ansi@^7.0.0": + "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + +"wrappy@1": + "integrity" "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "version" "1.0.2" + +"write-file-atomic@^4.0.1": + "integrity" "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==" + "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "imurmurhash" "^0.1.4" + "signal-exit" "^3.0.7" + +"xtend@^4.0.0", "xtend@^4.0.2": + "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + "version" "4.0.2" + +"y18n@^5.0.5": + "integrity" "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "resolved" "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + "version" "5.0.8" + +"yallist@^2.1.2": + "integrity" "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" + "version" "2.1.2" + +"yallist@^4.0.0": + "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + "version" "4.0.0" + +"yaml@^1.10.2": + "integrity" "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + "resolved" "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" + "version" "1.10.2" + +"yaml@^2.1.1": + "integrity" "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==" + "resolved" "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz" + "version" "2.1.1" + +"yargs-parser@^21.0.0": + "integrity" "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz" + "version" "21.0.1" + +"yargs@^17.3.1": + "integrity" "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz" + "version" "17.5.1" + dependencies: + "cliui" "^7.0.2" + "escalade" "^3.1.1" + "get-caller-file" "^2.0.5" + "require-directory" "^2.1.1" + "string-width" "^4.2.3" + "y18n" "^5.0.5" + "yargs-parser" "^21.0.0" + +"zwitch@^2.0.0": + "integrity" "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==" + "resolved" "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz" + "version" "2.0.2"