diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..41ea4c2 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,11 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true + +[*.{js,ts,jsx,tsx,css,less,json}] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..b7dab5e --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +node_modules +build \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..eb2f2be --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,75 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "plugins": [ + "@typescript-eslint", + "eslint-plugin-tsdoc" + ], + "parserOptions": { + "project": "./tsconfig.json", + "tsconfigRootDir": ".", + "ecmaVersion": 2018, + "ecmaFeatures": { + "jsx": true + }, + "sourceType": "module" + }, + "settings": { + "react": { + "version": "detect" + } + }, + "rules": { + "quotes": ["error", "double", { "allowTemplateLiterals": true }], + "semi": "error", + "indent": ["error", 2, { + "FunctionDeclaration": { "parameters": "first" } + }], + "eol-last": ["error", "always"], + "object-shorthand": ["error", "always"], + "no-unused-vars": 0, + "no-lonely-if": "warn", + "no-trailing-spaces": "warn", + "no-whitespace-before-property": "warn", + "space-before-blocks": "warn", + "space-in-parens": ["warn", "never"], + "space-infix-ops": "warn", + "eqeqeq": "warn", + + "react/display-name": 0, + "react/prop-types": 0, + "react/jsx-uses-react": "off", + "react/react-in-jsx-scope": "off", + + "tsdoc/syntax": "warn", + "@typescript-eslint/no-explicit-any": 0, + "@typescript-eslint/explicit-module-boundary-types": ["warn", { + "allowArgumentsExplicitlyTypedAsAny": true, + "allowDirectConstAssertionInArrowFunctions": true, + "allowedNames": [], + "allowHigherOrderFunctions": true, + "allowTypedFunctionExpressions": true + }], + "@typescript-eslint/consistent-type-definitions": ["error", "interface"], + "@typescript-eslint/member-delimiter-style": ["error", { + "multiline": {"delimiter": "semi", "requireLast": true}, + "singleline": {"delimiter": "semi", "requireLast": false} + }], + "@typescript-eslint/no-unused-vars": ["warn", { + "ignoreRestSiblings": true, + "argsIgnorePattern": "^_" + }], + "@typescript-eslint/no-non-null-assertion": 0, + "@typescript-eslint/space-before-function-paren": ["warn", { + "anonymous": "never", + "named": "never", + "asyncArrow": "always" + }] + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:react/recommended", + "plugin:react-hooks/recommended" + ] +} diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..f714a8e --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +custom: ["https://donate.lemmmy.pw"] diff --git a/.github/workflows/deploy-dev.yml b/.github/workflows/deploy-dev.yml new file mode 100644 index 0000000..cbb3f17 --- /dev/null +++ b/.github/workflows/deploy-dev.yml @@ -0,0 +1,41 @@ +name: Deploy dev build + +on: + push: + branches: + - master + +jobs: + deploy-dev: + runs-on: ubuntu-20.04 + + steps: + - name: Install git + run: | + sudo apt-get install -y software-properties-common \ + && sudo apt-get update \ + && sudo add-apt-repository -y ppa:git-core/ppa \ + && sudo apt-get update \ + && sudo apt-get install -y git + + - name: Check out repository code + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Install dependencies + run: npm install --legacy-peer-deps + + - name: Build + run: npm run full-build + + - name: Deploy to dev server + uses: appleboy/scp-action@master + with: + host: ${{ secrets.DEV_DEPLOY_HOST }} + username: ${{ secrets.DEV_DEPLOY_USER }} + key: ${{ secrets.DEV_DEPLOY_KEY }} + port: ${{ secrets.DEV_DEPLOY_PORT }} + source: "build" + target: ${{ secrets.DEV_DEPLOY_ROOT }} + rm: true diff --git a/.gitignore b/.gitignore index 4d29575..23cf531 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ /node_modules /.pnp .pnp.js +package-lock.json # testing /coverage @@ -21,3 +22,5 @@ npm-debug.log* yarn-debug.log* yarn-error.log* + +/src/__data__/host*.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..b55ef60 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,29 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "chrome", + "request": "launch", + "name": "Launch Chrome against localhost", + "url": "http://localhost:3000", + "webRoot": "${workspaceFolder}" + }, + { + "type": "firefox", + "request": "launch", + "name": "Launch Firefox against localhost", + "url": "http://localhost:3000", + "webRoot": "${workspaceFolder}", + "profile": "kristweb", + "keepProfileChanges": true, + "reAttach": true + }, + { + "type": "firefox", + "request": "attach", + "name": "Attach Firefox against localhost", + "url": "http://localhost:3000", + "webRoot": "${workspaceFolder}" + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..f93addc --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,86 @@ +{ + "cSpell.words": [ + "AGPL", + "Algo", + "Authed", + "Authorise", + "Debounces", + "Inequal", + "KRISTWALLET", + "KRISTWALLETEXTENSION", + "Lemmy", + "Lngs", + "Lyqydate", + "Mutex", + "Notif", + "Popconfirm", + "Precache", + "Sider", + "Syncable", + "Transpiler", + "UNSYNC", + "Voronoi", + "Websockets", + "antd", + "anticon", + "appendhashes", + "arraybuffer", + "authorised", + "behaviour", + "btns", + "categorised", + "chartjs", + "clientside", + "commithash", + "commonmeta", + "compat", + "cryptocurrency", + "desaturate", + "dont", + "firstseen", + "initialising", + "jwalelset", + "languagedetector", + "linkify", + "localisation", + "masterkey", + "memoises", + "metaname", + "mgmt", + "middot", + "midiots", + "motd", + "multiline", + "optimisation", + "personalise", + "pnpm", + "precaching", + "privatekeys", + "readonly", + "serialisable", + "serialised", + "shallowequal", + "singleline", + "submenu", + "summarising", + "testid", + "timeago", + "totalin", + "totalout", + "treenode", + "tsdoc", + "typeahead", + "uncategorised", + "unmount", + "unmounting", + "unregistering", + "unsyncable", + "whatsnew", + "workerize" + ], + "i18next.defaultTranslatedLocale": "en", + "i18next.i18nPaths": "public/locales", + "files.associations": { + "public/locales/**.json": "json5" + } +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..33602e9 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,10 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "start", + "isBackground": true + } + ] +} diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..be3f7b2 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/README.md b/README.md index 74735dc..8b0a955 100644 --- a/README.md +++ b/README.md @@ -1,44 +1,98 @@ -This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). +# KristWeb v2 [![Donate on PayPal](https://img.shields.io/badge/PayPal-donate-0079C1?logo=paypal&style=flat-square)](https://paypal.me/lemmmy) ![GitHub Workflow Status](https://img.shields.io/github/workflow/status/tmpim/KristWeb2/Deploy%20dev%20build?label=dev%20deploy&style=flat-square) ![Codacy grade](https://img.shields.io/codacy/grade/8b0ee8f672554cf39324d31f559ce086?style=flat-square) ![Lines of code](https://img.shields.io/tokei/lines/github/tmpim/KristWeb2?style=flat-square) ![GitHub issues](https://img.shields.io/github/issues/tmpim/KristWeb2?style=flat-square) ![GitHub pull requests](https://img.shields.io/github/issues-pr/tmpim/KristWeb2?style=flat-square) ![GitHub package.json version](https://img.shields.io/github/package-json/v/tmpim/KristWeb2?style=flat-square) ![GitHub](https://img.shields.io/github/license/tmpim/KristWeb2?style=flat-square) -## Available Scripts + + + + +
-In the project directory, you can run: +

STILL IN DEVELOPMENT

-### `npm start` +*This project is heavily under development. It is currently in the design +stages, meaning there is **no useful functionality yet***. -Runs the app in the development mode.
-Open [http://localhost:3000](http://localhost:3000) to view it in the browser. +Rewrite of the Krist Web Wallet, in React. This is a fully clientside Krist +wallet that only needs to communicate to the Krist node itself. It securely +saves wallets encrypted in your browser's Local Storage, so you don't have to +type in wallet passwords ever again! -The page will reload if you make edits.
-You will also see any lint errors in the console. +### Building (for development) -### `npm test` +```sh +git clone https://github.com/tmpim/KristWeb2 +cd KristWeb2 -Launches the test runner in the interactive watch mode.
-See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. +npm i -g pnpm # If you don't have pnpm, please use it for development -### `npm run build` +pnpm install +npm start # Run the development server +``` -Builds the app for production to the `build` folder.
-It correctly bundles React in production mode and optimizes the build for the best performance. +### Building (for production) -The build is minified and the filenames include the hashes.
-Your app is ready to be deployed! +```sh +git clone https://github.com/tmpim/KristWeb2 +cd KristWeb2 +npm install +npm run full-build # Build the production files +``` -See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. +### Contributing -### `npm run eject` +As per tmpim convention, this project uses +[Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) as a +standard for commit messages. -**Note: this is a one-way operation. Once you `eject`, you can’t go back!** +### Contributing translations -If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. +Translation files are currently created manually in the +[i18next JSON format](https://www.i18next.com/misc/json-format), with support +for [JSON5 syntax](https://spec.json5.org/). You can find existing translations +in [`public/locales`](public/locales). The +[English (GB) translation](public/locales/en.json) is used as the fallback. -Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. +Language files are named with +[IETF language tags](https://en.wikipedia.org/wiki/IETF_language_tag). Short +tags (e.g. `en` instead of `en-GB`) are preferred. -You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. +**IMPORTANT:** If you are adding a new language, you **must** add a listing for +the language with the English name, native name, a country code (for the flag) +and the contributors list to +[`src/__data__/languages.json`](src/__data__/languages.json). It's not terribly +important, but the list should be kept in alphabetical order **by language +code**. -## Learn More +The keys `antLocale`, `dayjsLocale` and `timeagoLocale` are all optional keys +that refer to the locale names from the respective libraries. If the library +does not support your language, create an issue on this repo or mention it in +your PR, because I can add a simple system to support custom translations for +these libraries if it is needed, though you should also PR to the libraries +themselves. -You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). +List of supported locale codes for each library: -To learn React, check out the [React documentation](https://reactjs.org/). +- `ant-design` - https://ant.design/docs/react/i18n +- `dayjs` - https://github.com/iamkun/dayjs/tree/dev/src/locale +- `react-timeago` - https://github.com/nmn/react-timeago/tree/master/src/language-strings + +The library will automatically detect the language from your browser to use, but +for the sake of testing, you can override it by running the following command in +the developer console (Ctrl+Shift+I): + +```js +localStorage.i18nextLng = "en"; +``` + +If you need any help with specific i18next features (e.g. handling plurals), +don't hesitate to contact Lemmmy. + +### Donate + +If you like my work, and want to help me with this hobby project and many more +in the future, please consider [donating](https://donate.lemmmy.pw). + +### License + +**Copyright (c) 2020-2021 Drew Lemmy** + +This project is licensed under the AGPL v3 license. See LICENSE.txt for more. diff --git a/craco.config.js b/craco.config.js new file mode 100644 index 0000000..16d66cf --- /dev/null +++ b/craco.config.js @@ -0,0 +1,100 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under GPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +const path = require("path"); +const CracoAlias = require("craco-alias"); +const CracoLessPlugin = require("@lemmmy/craco-less"); +const AntdDayjsWebpackPlugin = require("antd-dayjs-webpack-plugin"); +const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer"); +const WebpackBar = require("webpackbar"); +const GitRevisionPlugin = require("git-revision-webpack-plugin"); +const { DefinePlugin } = require("webpack"); +const { commits } = require("./tools/commitLog"); + +const gitRevisionPlugin = new GitRevisionPlugin({ + // Include the "-dirty" suffix if the local tree has been modified, and + // include non-annotated tags. + versionCommand: "describe --always --tags --dirty" +}); + +module.exports = { + style: { + css: { + loaderOptions: { + url: false + } + } + }, + + babel: { + plugins: [ + "lodash", + ["@simbathesailor/babel-plugin-use-what-changed", { + "active": process.env.NODE_ENV === "development" + }] + ], + }, + + plugins: [ + { + plugin: CracoAlias, + options: { + source: "tsconfig", + baseUrl: "./src", + tsConfigPath: "./tsconfig.extend.json" + } + }, + { + plugin: CracoLessPlugin, + options: { + cssLoaderOptions: { + url: false + }, + + lessLoaderOptions: { + webpackImporter: false, + implementation: require("less"), + + lessOptions: { + relativeUrls: false, + javascriptEnabled: true, + paths: [path.resolve(__dirname, "node_modules")] + } + } + } + } + ], + + // I use eslint in vscode - to save my CPU I'd rather just rely on using that + // to lint instead of the react-scripts watcher. + // TODO: run this for production builds, and add a separate command for it. + eslint: { + enable: false + }, + + webpack: { + plugins: [ + new WebpackBar({ profile: true }), + ...(process.env.NODE_ENV === "development" || process.env.FORCE_ANALYZE + ? [new BundleAnalyzerPlugin({ openAnalyzer: false })] + : []), + new AntdDayjsWebpackPlugin(), + gitRevisionPlugin, + new DefinePlugin({ + "__GIT_VERSION__": DefinePlugin.runtimeValue(() => JSON.stringify(gitRevisionPlugin.version()), []), + "__GIT_COMMIT_HASH__": DefinePlugin.runtimeValue(() => JSON.stringify(gitRevisionPlugin.commithash()), []), + "__BUILD_TIME__": DefinePlugin.runtimeValue(Date.now), + "__GIT_COMMITS__": JSON.stringify(commits) + }) + ], + + optimization: { + sideEffects: true + }, + + configure: { + devtool: process.env.NODE_ENV === "development" + ? "eval" : "hidden-source-map" + } + }, +}; diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 608412b..0000000 --- a/package-lock.json +++ /dev/null @@ -1,13853 +0,0 @@ -{ - "name": "kristweb2", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/compat-data": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.11.0.tgz", - "integrity": "sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==", - "requires": { - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "@babel/core": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", - "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.0", - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helpers": "^7.9.0", - "@babel/parser": "^7.9.0", - "@babel/template": "^7.8.6", - "@babel/traverse": "^7.9.0", - "@babel/types": "^7.9.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "@babel/generator": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", - "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", - "requires": { - "@babel/types": "^7.11.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-builder-react-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", - "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-builder-react-jsx-experimental": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.5.tgz", - "integrity": "sha512-Buewnx6M4ttG+NLkKyt7baQn7ScC/Td+e99G914fRU8fGIUivDDgVIQeDHFa5e4CRSJQt58WpNHhsAZgtzVhsg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", - "@babel/types": "^7.10.5" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", - "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", - "requires": { - "@babel/compat-data": "^7.10.4", - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "levenary": "^1.1.1", - "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz", - "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.10.5", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", - "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.0" - } - }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz", - "integrity": "sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==", - "requires": { - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", - "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-module-transforms": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", - "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/template": "^7.10.4", - "@babel/types": "^7.11.0", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", - "requires": { - "lodash": "^4.17.19" - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz", - "integrity": "sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-simple-access": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", - "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", - "requires": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz", - "integrity": "sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q==", - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@babel/helper-wrap-function": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", - "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helpers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", - "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", - "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.2.tgz", - "integrity": "sha512-Vuj/+7vLo6l1Vi7uuO+1ngCDNeVmNbTngcJFKCR/oEtz8tKz0CJxZEGmPt9KcIloZhOZ3Zit6xbpXT2MDlS9Vw==" - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", - "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4", - "@babel/plugin-syntax-async-generators": "^7.8.0" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", - "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-decorators": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.8.3.tgz", - "integrity": "sha512-e3RvdvS4qPJVTe288DlXjwKflpfy1hr0j5dz5WpIYYeP7vQZg2WfAEIp8k5/Lwis/m5REXEteIz6rrcDtXXG7w==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-decorators": "^7.8.3" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", - "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz", - "integrity": "sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", - "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz", - "integrity": "sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", - "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", - "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", - "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.4" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", - "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz", - "integrity": "sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", - "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", - "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@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==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", - "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.4.tgz", - "integrity": "sha512-2NaoC6fAk2VMdhY1eerkfHV+lVYC1u8b+jmRJISqANCJlTxYy19HGdIkkQtix2UtkcPuPu+IlDgrVseZnU03bw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.10.4.tgz", - "integrity": "sha512-yxQsX1dJixF4qEEdzVbst3SZQ58Nrooz8NV9Z9GL4byTE25BvJgl5lf0RECUf0fh28rZBb/RYTWn/eeKwCMrZQ==", - "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==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", - "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@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==", - "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==", - "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==", - "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==", - "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==", - "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==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", - "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.4.tgz", - "integrity": "sha512-oSAEz1YkBCAKr5Yiq8/BNtvSAPwkp/IyUnwZogd8p+F0RuYQQrLeRUzIQhueQTTBy/F+a40uS7OFKxnkRvmvFQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", - "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", - "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", - "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz", - "integrity": "sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", - "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", - "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", - "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", - "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", - "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", - "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.9.0.tgz", - "integrity": "sha512-7Qfg0lKQhEHs93FChxVLAvhBshOPQDtJUTVHr/ZwQNRccCm4O9D79r9tVSoV8iNwjP1YgfD+e/fgHcPkN1qEQg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-flow": "^7.8.3" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", - "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", - "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", - "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", - "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", - "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", - "requires": { - "@babel/helper-module-transforms": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", - "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", - "requires": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", - "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", - "requires": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", - "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", - "requires": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", - "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", - "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", - "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", - "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", - "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.10.4.tgz", - "integrity": "sha512-cYmQBW1pXrqBte1raMkAulXmi7rjg3VI6ZLg9QIic8Hq7BtYXaWuZSxsr2siOMI6SWwpxjWfnwhTUrd7JlAV7g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.4.tgz", - "integrity": "sha512-Zd4X54Mu9SBfPGnEcaGcOrVAYOtjT2on8QZkLKEq1S/tHexG39d9XXGZv19VfRrDjPJzFmPfTAqOQS1pfFOujw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz", - "integrity": "sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A==", - "requires": { - "@babel/helper-builder-react-jsx": "^7.10.4", - "@babel/helper-builder-react-jsx-experimental": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.10.4" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.4.tgz", - "integrity": "sha512-RM3ZAd1sU1iQ7rI2dhrZRZGv0aqzNQMbkIUCS1txYpi9wHQ2ZHNjo5TwX+UD6pvFW4AbWqLVYvKy5qJSAyRGjQ==", - "requires": { - "@babel/helper-builder-react-jsx-experimental": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.10.4" - } - }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.4.tgz", - "integrity": "sha512-yOvxY2pDiVJi0axdTWHSMi5T0DILN+H+SaeJeACHKjQLezEzhLx9nEF9xgpBLPtkZsks9cnb5P9iBEi21En3gg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.10.4" - } - }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.5.tgz", - "integrity": "sha512-wTeqHVkN1lfPLubRiZH3o73f4rfon42HpgxUSs86Nc+8QIcm/B9s8NNVXu/gwGcOyd7yDib9ikxoDLxJP0UiDA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.10.4" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.4.tgz", - "integrity": "sha512-+njZkqcOuS8RaPakrnR9KvxjoG1ASJWpoIv/doyWngId88JoFlPlISenGXjrVacZUIALGUr6eodRs1vmPnF23A==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", - "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", - "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.0.tgz", - "integrity": "sha512-pUu9VSf3kI1OqbWINQ7MaugnitRss1z533436waNXp+0N3ur3zfut37sXiQMxkuCF4VUjwZucen/quskCh7NHw==", - "requires": { - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "resolve": "^1.8.1", - "semver": "^5.5.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", - "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz", - "integrity": "sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", - "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-regex": "^7.10.4" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", - "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", - "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.11.0.tgz", - "integrity": "sha512-edJsNzTtvb3MaXQwj8403B7mZoGu9ElDJQZOKjGUnvilquxBA3IQoEIOvkX/1O8xfAsnHS/oQhe2w/IXrr+w0w==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-typescript": "^7.10.4" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", - "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", - "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/preset-env": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.0.tgz", - "integrity": "sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg==", - "requires": { - "@babel/compat-data": "^7.11.0", - "@babel/helper-compilation-targets": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-proposal-async-generator-functions": "^7.10.4", - "@babel/plugin-proposal-class-properties": "^7.10.4", - "@babel/plugin-proposal-dynamic-import": "^7.10.4", - "@babel/plugin-proposal-export-namespace-from": "^7.10.4", - "@babel/plugin-proposal-json-strings": "^7.10.4", - "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", - "@babel/plugin-proposal-numeric-separator": "^7.10.4", - "@babel/plugin-proposal-object-rest-spread": "^7.11.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", - "@babel/plugin-proposal-optional-chaining": "^7.11.0", - "@babel/plugin-proposal-private-methods": "^7.10.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.10.4", - "@babel/plugin-transform-arrow-functions": "^7.10.4", - "@babel/plugin-transform-async-to-generator": "^7.10.4", - "@babel/plugin-transform-block-scoped-functions": "^7.10.4", - "@babel/plugin-transform-block-scoping": "^7.10.4", - "@babel/plugin-transform-classes": "^7.10.4", - "@babel/plugin-transform-computed-properties": "^7.10.4", - "@babel/plugin-transform-destructuring": "^7.10.4", - "@babel/plugin-transform-dotall-regex": "^7.10.4", - "@babel/plugin-transform-duplicate-keys": "^7.10.4", - "@babel/plugin-transform-exponentiation-operator": "^7.10.4", - "@babel/plugin-transform-for-of": "^7.10.4", - "@babel/plugin-transform-function-name": "^7.10.4", - "@babel/plugin-transform-literals": "^7.10.4", - "@babel/plugin-transform-member-expression-literals": "^7.10.4", - "@babel/plugin-transform-modules-amd": "^7.10.4", - "@babel/plugin-transform-modules-commonjs": "^7.10.4", - "@babel/plugin-transform-modules-systemjs": "^7.10.4", - "@babel/plugin-transform-modules-umd": "^7.10.4", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", - "@babel/plugin-transform-new-target": "^7.10.4", - "@babel/plugin-transform-object-super": "^7.10.4", - "@babel/plugin-transform-parameters": "^7.10.4", - "@babel/plugin-transform-property-literals": "^7.10.4", - "@babel/plugin-transform-regenerator": "^7.10.4", - "@babel/plugin-transform-reserved-words": "^7.10.4", - "@babel/plugin-transform-shorthand-properties": "^7.10.4", - "@babel/plugin-transform-spread": "^7.11.0", - "@babel/plugin-transform-sticky-regex": "^7.10.4", - "@babel/plugin-transform-template-literals": "^7.10.4", - "@babel/plugin-transform-typeof-symbol": "^7.10.4", - "@babel/plugin-transform-unicode-escapes": "^7.10.4", - "@babel/plugin-transform-unicode-regex": "^7.10.4", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.11.0", - "browserslist": "^4.12.0", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", - "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "@babel/preset-modules": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", - "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.10.4.tgz", - "integrity": "sha512-BrHp4TgOIy4M19JAfO1LhycVXOPWdDbTRep7eVyatf174Hff+6Uk53sDyajqZPu8W1qXRBiYOfIamek6jA7YVw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-transform-react-display-name": "^7.10.4", - "@babel/plugin-transform-react-jsx": "^7.10.4", - "@babel/plugin-transform-react-jsx-development": "^7.10.4", - "@babel/plugin-transform-react-jsx-self": "^7.10.4", - "@babel/plugin-transform-react-jsx-source": "^7.10.4", - "@babel/plugin-transform-react-pure-annotations": "^7.10.4" - } - }, - "@babel/preset-typescript": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.9.0.tgz", - "integrity": "sha512-S4cueFnGrIbvYJgwsVFKdvOmpiL0XGw9MFW9D0vgRys5g36PBhZRL8NX8Gr2akz8XRtzq6HuDXPD/1nniagNUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-transform-typescript": "^7.9.0" - } - }, - "@babel/runtime": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", - "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/runtime-corejs3": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.11.2.tgz", - "integrity": "sha512-qh5IR+8VgFz83VBa6OkaET6uN/mJOhHONuy3m1sgF0CV6mXdPSEBdA7e1eUbVvyNtANjMbg22JUv71BaDXLY6A==", - "requires": { - "core-js-pure": "^3.0.0", - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", - "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.0", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.11.0", - "@babel/types": "^7.11.0", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", - "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@csstools/convert-colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", - "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" - }, - "@csstools/normalize.css": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz", - "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==" - }, - "@hapi/address": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", - "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" - }, - "@hapi/bourne": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", - "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" - }, - "@hapi/hoek": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", - "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" - }, - "@hapi/joi": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", - "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", - "requires": { - "@hapi/address": "2.x.x", - "@hapi/bourne": "1.x.x", - "@hapi/hoek": "8.x.x", - "@hapi/topo": "3.x.x" - } - }, - "@hapi/topo": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", - "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", - "requires": { - "@hapi/hoek": "^8.3.0" - } - }, - "@jest/console": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", - "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", - "requires": { - "@jest/source-map": "^24.9.0", - "chalk": "^2.0.1", - "slash": "^2.0.0" - } - }, - "@jest/core": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", - "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", - "requires": { - "@jest/console": "^24.7.1", - "@jest/reporters": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.9.0", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-resolve-dependencies": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "jest-watcher": "^24.9.0", - "micromatch": "^3.1.10", - "p-each-series": "^1.0.0", - "realpath-native": "^1.1.0", - "rimraf": "^2.5.4", - "slash": "^2.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" - } - } - }, - "@jest/environment": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", - "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", - "requires": { - "@jest/fake-timers": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0" - } - }, - "@jest/fake-timers": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", - "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", - "requires": { - "@jest/types": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0" - } - }, - "@jest/reporters": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", - "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", - "requires": { - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.2", - "istanbul-lib-coverage": "^2.0.2", - "istanbul-lib-instrument": "^3.0.1", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.2.6", - "jest-haste-map": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "node-notifier": "^5.4.2", - "slash": "^2.0.0", - "source-map": "^0.6.0", - "string-length": "^2.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "@jest/source-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", - "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", - "source-map": "^0.6.0" - }, - "dependencies": { - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "@jest/test-result": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", - "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", - "requires": { - "@jest/console": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/istanbul-lib-coverage": "^2.0.0" - } - }, - "@jest/test-sequencer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", - "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", - "requires": { - "@jest/test-result": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0" - } - }, - "@jest/transform": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", - "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^24.9.0", - "babel-plugin-istanbul": "^5.1.0", - "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.9.0", - "jest-regex-util": "^24.9.0", - "jest-util": "^24.9.0", - "micromatch": "^3.1.10", - "pirates": "^4.0.1", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "2.4.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - } - }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", - "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" - } - }, - "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" - }, - "@sheerun/mutationobserver-shim": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.3.tgz", - "integrity": "sha512-DetpxZw1fzPD5xUBrIAoplLChO2VB8DlL5Gg+I1IR9b2wPqYIca2WSUxL5g1vLeR4MsQq1NeWriXAVffV+U1Fw==" - }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz", - "integrity": "sha512-j7KnilGyZzYr/jhcrSYS3FGWMZVaqyCG0vzMCwzvei0coIkczuYMcniK07nI0aHJINciujjH11T72ICW5eL5Ig==" - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.2.0.tgz", - "integrity": "sha512-3XHLtJ+HbRCH4n28S7y/yZoEQnRpl0tvTZQsHqvaeNXPra+6vE5tbRliH3ox1yZYPCxrlqaJT/Mg+75GpDKlvQ==" - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.2.0.tgz", - "integrity": "sha512-yTr2iLdf6oEuUE9MsRdvt0NmdpMBAkgK8Bjhl6epb+eQWk6abBaX3d65UZ3E3FWaOwePyUgNyNCMVG61gGCQ7w==" - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.2.0.tgz", - "integrity": "sha512-U9m870Kqm0ko8beHawRXLGLvSi/ZMrl89gJ5BNcT452fAjtF2p4uRzXkdzvGJJJYBgx7BmqlDjBN/eCp5AAX2w==" - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.3.tgz", - "integrity": "sha512-w3Be6xUNdwgParsvxkkeZb545VhXEwjGMwExMVBIdPQJeyMQHqm9Msnb2a1teHBqUYL66qtwfhNkbj1iarCG7w==" - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.2.0.tgz", - "integrity": "sha512-C0Uy+BHolCHGOZ8Dnr1zXy/KgpBOkEUYY9kI/HseHVPeMbluaX3CijJr7D4C5uR8zrc1T64nnq/k63ydQuGt4w==" - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.2.0.tgz", - "integrity": "sha512-7YvynOpZDpCOUoIVlaaOUU87J4Z6RdD6spYN4eUb5tfPoKGSF9OG2NuhgYnq4jSkAxcpMaXWPf1cePkzmqTPNw==" - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.2.0.tgz", - "integrity": "sha512-hYfYuZhQPCBVotABsXKSCfel2slf/yvJY8heTVX1PCTaq/IgASq1IyxPPKJ0chWREEKewIU/JMSsIGBtK1KKxw==" - }, - "@svgr/babel-preset": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.3.3.tgz", - "integrity": "sha512-6PG80tdz4eAlYUN3g5GZiUjg2FMcp+Wn6rtnz5WJG9ITGEF1pmFdzq02597Hn0OmnQuCVaBYQE1OVFAnwOl+0A==", - "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^4.2.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^4.2.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^4.2.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^4.2.0", - "@svgr/babel-plugin-svg-dynamic-title": "^4.3.3", - "@svgr/babel-plugin-svg-em-dimensions": "^4.2.0", - "@svgr/babel-plugin-transform-react-native-svg": "^4.2.0", - "@svgr/babel-plugin-transform-svg-component": "^4.2.0" - } - }, - "@svgr/core": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.3.3.tgz", - "integrity": "sha512-qNuGF1QON1626UCaZamWt5yedpgOytvLj5BQZe2j1k1B8DUG4OyugZyfEwBeXozCUwhLEpsrgPrE+eCu4fY17w==", - "requires": { - "@svgr/plugin-jsx": "^4.3.3", - "camelcase": "^5.3.1", - "cosmiconfig": "^5.2.1" - } - }, - "@svgr/hast-util-to-babel-ast": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.3.2.tgz", - "integrity": "sha512-JioXclZGhFIDL3ddn4Kiq8qEqYM2PyDKV0aYno8+IXTLuYt6TOgHUbUAAFvqtb0Xn37NwP0BTHglejFoYr8RZg==", - "requires": { - "@babel/types": "^7.4.4" - } - }, - "@svgr/plugin-jsx": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-4.3.3.tgz", - "integrity": "sha512-cLOCSpNWQnDB1/v+SUENHH7a0XY09bfuMKdq9+gYvtuwzC2rU4I0wKGFEp1i24holdQdwodCtDQdFtJiTCWc+w==", - "requires": { - "@babel/core": "^7.4.5", - "@svgr/babel-preset": "^4.3.3", - "@svgr/hast-util-to-babel-ast": "^4.3.2", - "svg-parser": "^2.0.0" - } - }, - "@svgr/plugin-svgo": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-4.3.1.tgz", - "integrity": "sha512-PrMtEDUWjX3Ea65JsVCwTIXuSqa3CG9px+DluF1/eo9mlDrgrtFE7NE/DjdhjJgSM9wenlVBzkzneSIUgfUI/w==", - "requires": { - "cosmiconfig": "^5.2.1", - "merge-deep": "^3.0.2", - "svgo": "^1.2.2" - } - }, - "@svgr/webpack": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-4.3.3.tgz", - "integrity": "sha512-bjnWolZ6KVsHhgyCoYRFmbd26p8XVbulCzSG53BDQqAr+JOAderYK7CuYrB3bDjHJuF6LJ7Wrr42+goLRV9qIg==", - "requires": { - "@babel/core": "^7.4.5", - "@babel/plugin-transform-react-constant-elements": "^7.0.0", - "@babel/preset-env": "^7.4.5", - "@babel/preset-react": "^7.0.0", - "@svgr/core": "^4.3.3", - "@svgr/plugin-jsx": "^4.3.3", - "@svgr/plugin-svgo": "^4.3.1", - "loader-utils": "^1.2.3" - } - }, - "@testing-library/dom": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-6.16.0.tgz", - "integrity": "sha512-lBD88ssxqEfz0wFL6MeUyyWZfV/2cjEZZV3YRpb2IoJRej/4f1jB0TzqIOznTpfR1r34CNesrubxwIlAQ8zgPA==", - "requires": { - "@babel/runtime": "^7.8.4", - "@sheerun/mutationobserver-shim": "^0.3.2", - "@types/testing-library__dom": "^6.12.1", - "aria-query": "^4.0.2", - "dom-accessibility-api": "^0.3.0", - "pretty-format": "^25.1.0", - "wait-for-expect": "^3.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/yargs": { - "version": "15.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.5.tgz", - "integrity": "sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "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==", - "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "requires": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@testing-library/jest-dom": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-4.2.4.tgz", - "integrity": "sha512-j31Bn0rQo12fhCWOUWy9fl7wtqkp7In/YP2p5ZFyRuiiB9Qs3g+hS4gAmDWONbAHcRmVooNJ5eOHQDCOmUFXHg==", - "requires": { - "@babel/runtime": "^7.5.1", - "chalk": "^2.4.1", - "css": "^2.2.3", - "css.escape": "^1.5.1", - "jest-diff": "^24.0.0", - "jest-matcher-utils": "^24.0.0", - "lodash": "^4.17.11", - "pretty-format": "^24.0.0", - "redent": "^3.0.0" - } - }, - "@testing-library/react": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-9.5.0.tgz", - "integrity": "sha512-di1b+D0p+rfeboHO5W7gTVeZDIK5+maEgstrZbWZSSvxDyfDRkkyBE1AJR5Psd6doNldluXlCWqXriUfqu/9Qg==", - "requires": { - "@babel/runtime": "^7.8.4", - "@testing-library/dom": "^6.15.0", - "@types/testing-library__react": "^9.1.2" - } - }, - "@testing-library/user-event": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-7.2.1.tgz", - "integrity": "sha512-oZ0Ib5I4Z2pUEcoo95cT1cr6slco9WY7yiPpG+RGNkj8YcYgJnM7pXmYmorNOReh8MIGcKSqXyeGjxnr8YiZbA==" - }, - "@types/babel__core": { - "version": "7.1.9", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.9.tgz", - "integrity": "sha512-sY2RsIJ5rpER1u3/aQ8OFSI7qGIy8o1NEEbgb2UaJcvOtXOMpd39ko723NBpjQFg9SIX7TXtjejZVGeIMLhoOw==", - "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.1", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz", - "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==", - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", - "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.13.tgz", - "integrity": "sha512-i+zS7t6/s9cdQvbqKDARrcbrPvtJGlbYsMkazo03nTAK3RX9FNrLllXys22uiTGJapPOTZTQ35nHh4ISph4SLQ==", - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - }, - "@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==" - }, - "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" - }, - "@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==", - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "24.9.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.9.1.tgz", - "integrity": "sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q==", - "requires": { - "jest-diff": "^24.3.0" - } - }, - "@types/json-schema": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", - "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==" - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" - }, - "@types/node": { - "version": "12.12.53", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.53.tgz", - "integrity": "sha512-51MYTDTyCziHb70wtGNFRwB4l+5JNvdqzFSkbDvpbftEgVUBEE+T5f7pROhWMp/fxp07oNIEQZd5bbfAH22ohQ==" - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "@types/prop-types": { - "version": "15.7.3", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" - }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" - }, - "@types/react": { - "version": "16.9.44", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.44.tgz", - "integrity": "sha512-BtLoJrXdW8DVZauKP+bY4Kmiq7ubcJq+H/aCpRfvPF7RAT3RwR73Sg8szdc2YasbAlWBDrQ6Q+AFM0KwtQY+WQ==", - "requires": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "16.9.8", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.8.tgz", - "integrity": "sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA==", - "requires": { - "@types/react": "*" - } - }, - "@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==" - }, - "@types/testing-library__dom": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/testing-library__dom/-/testing-library__dom-6.14.0.tgz", - "integrity": "sha512-sMl7OSv0AvMOqn1UJ6j1unPMIHRXen0Ita1ujnMX912rrOcawe4f7wu0Zt9GIQhBhJvH2BaibqFgQ3lP+Pj2hA==", - "requires": { - "pretty-format": "^24.3.0" - } - }, - "@types/testing-library__react": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@types/testing-library__react/-/testing-library__react-9.1.3.tgz", - "integrity": "sha512-iCdNPKU3IsYwRK9JieSYAiX0+aYDXOGAmrC/3/M7AqqSDKnWWVv07X+Zk1uFSL7cMTUYzv4lQRfohucEocn5/w==", - "requires": { - "@types/react-dom": "*", - "@types/testing-library__dom": "*", - "pretty-format": "^25.1.0" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - } - }, - "@types/yargs": { - "version": "15.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.5.tgz", - "integrity": "sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "requires": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@types/yargs": { - "version": "13.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.10.tgz", - "integrity": "sha512-MU10TSgzNABgdzKvQVW1nuuT+sgBMWeXNc3XOs5YXV5SDAK+PPja2eUuBNB9iqElu03xyEDqlnGw0jgl4nbqGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==" - }, - "@typescript-eslint/eslint-plugin": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", - "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", - "requires": { - "@typescript-eslint/experimental-utils": "2.34.0", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", - "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", - "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", - "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.34.0", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-visitor-keys": "^1.1.0" - } - }, - "@typescript-eslint/typescript-estree": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", - "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", - "requires": { - "debug": "^4.1.1", - "eslint-visitor-keys": "^1.1.0", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "dependencies": { - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" - } - } - }, - "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", - "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==" - }, - "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==" - }, - "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==" - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", - "requires": { - "@webassemblyjs/wast-printer": "1.8.5" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==" - }, - "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==" - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==" - }, - "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", - "@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==" - }, - "@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==" - }, - "abab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.4.tgz", - "integrity": "sha512-Eu9ELJWCz/c1e9gTiCY+FceWxcqzjYEbqMgtndnuSqZSUCOL73TWNK2mHfIj4Cw2E/ongOp+JISVNCmovt2KYQ==" - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", - "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==" - }, - "acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", - "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==" - } - } - }, - "acorn-jsx": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", - "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==" - }, - "acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==" - }, - "address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" - }, - "adjust-sourcemap-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz", - "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==", - "requires": { - "assert": "1.4.1", - "camelcase": "5.0.0", - "loader-utils": "1.2.3", - "object-path": "0.11.4", - "regex-parser": "2.2.10" - }, - "dependencies": { - "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - } - } - }, - "aggregate-error": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", - "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", - "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-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" - }, - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" - }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "requires": { - "type-fest": "^0.11.0" - }, - "dependencies": { - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" - } - } - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "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==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "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": "3.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", - "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", - "requires": { - "ast-types-flow": "0.0.7", - "commander": "^2.11.0" - } - }, - "arity-n": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", - "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=" - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=" - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "array-includes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", - "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", - "is-string": "^1.0.5" - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "array.prototype.flat": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", - "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "requires": { - "util": "0.10.3" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=" - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "requires": { - "lodash": "^4.17.14" - } - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, - "autoprefixer": { - "version": "9.8.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", - "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "colorette": "^1.2.1", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", - "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==" - }, - "axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - } - }, - "babel-extract-comments": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz", - "integrity": "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==", - "requires": { - "babylon": "^6.18.0" - } - }, - "babel-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", - "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", - "requires": { - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/babel__core": "^7.1.0", - "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.9.0", - "chalk": "^2.4.2", - "slash": "^2.0.0" - } - }, - "babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", - "requires": { - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", - "pify": "^4.0.1", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-istanbul": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", - "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "find-up": "^3.0.0", - "istanbul-lib-instrument": "^3.3.0", - "test-exclude": "^5.2.3" - } - }, - "babel-plugin-jest-hoist": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", - "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", - "requires": { - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-macros": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", - "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", - "requires": { - "@babel/runtime": "^7.7.2", - "cosmiconfig": "^6.0.0", - "resolve": "^1.12.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "parse-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", - "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "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==" - } - } - }, - "babel-plugin-named-asset-import": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.6.tgz", - "integrity": "sha512-1aGDUfL1qOOIoqk9QKGIo2lANk+C7ko/fqH0uIyC71x3PEGz0uVP8ISgfEsFuG+FKmjHTvFK/nNM8dowpmUxLA==" - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=" - }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", - "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.26.0" - } - }, - "babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" - }, - "babel-preset-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", - "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", - "requires": { - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.9.0" - } - }, - "babel-preset-react-app": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-9.1.2.tgz", - "integrity": "sha512-k58RtQOKH21NyKtzptoAvtAODuAJJs3ZhqBMl456/GnXEQ/0La92pNmwgWoMn5pBTrsvk3YYXdY7zpY4e3UIxA==", - "requires": { - "@babel/core": "7.9.0", - "@babel/plugin-proposal-class-properties": "7.8.3", - "@babel/plugin-proposal-decorators": "7.8.3", - "@babel/plugin-proposal-nullish-coalescing-operator": "7.8.3", - "@babel/plugin-proposal-numeric-separator": "7.8.3", - "@babel/plugin-proposal-optional-chaining": "7.9.0", - "@babel/plugin-transform-flow-strip-types": "7.9.0", - "@babel/plugin-transform-react-display-name": "7.8.3", - "@babel/plugin-transform-runtime": "7.9.0", - "@babel/preset-env": "7.9.0", - "@babel/preset-react": "7.9.1", - "@babel/preset-typescript": "7.9.0", - "@babel/runtime": "7.9.0", - "babel-plugin-macros": "2.8.0", - "babel-plugin-transform-react-remove-prop-types": "0.4.24" - }, - "dependencies": { - "@babel/plugin-proposal-class-properties": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz", - "integrity": "sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz", - "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz", - "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz", - "integrity": "sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/preset-env": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.0.tgz", - "integrity": "sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ==", - "requires": { - "@babel/compat-data": "^7.9.0", - "@babel/helper-compilation-targets": "^7.8.7", - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-proposal-async-generator-functions": "^7.8.3", - "@babel/plugin-proposal-dynamic-import": "^7.8.3", - "@babel/plugin-proposal-json-strings": "^7.8.3", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-proposal-numeric-separator": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.9.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", - "@babel/plugin-proposal-optional-chaining": "^7.9.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.8.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.8.3", - "@babel/plugin-transform-async-to-generator": "^7.8.3", - "@babel/plugin-transform-block-scoped-functions": "^7.8.3", - "@babel/plugin-transform-block-scoping": "^7.8.3", - "@babel/plugin-transform-classes": "^7.9.0", - "@babel/plugin-transform-computed-properties": "^7.8.3", - "@babel/plugin-transform-destructuring": "^7.8.3", - "@babel/plugin-transform-dotall-regex": "^7.8.3", - "@babel/plugin-transform-duplicate-keys": "^7.8.3", - "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.9.0", - "@babel/plugin-transform-function-name": "^7.8.3", - "@babel/plugin-transform-literals": "^7.8.3", - "@babel/plugin-transform-member-expression-literals": "^7.8.3", - "@babel/plugin-transform-modules-amd": "^7.9.0", - "@babel/plugin-transform-modules-commonjs": "^7.9.0", - "@babel/plugin-transform-modules-systemjs": "^7.9.0", - "@babel/plugin-transform-modules-umd": "^7.9.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", - "@babel/plugin-transform-new-target": "^7.8.3", - "@babel/plugin-transform-object-super": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.8.7", - "@babel/plugin-transform-property-literals": "^7.8.3", - "@babel/plugin-transform-regenerator": "^7.8.7", - "@babel/plugin-transform-reserved-words": "^7.8.3", - "@babel/plugin-transform-shorthand-properties": "^7.8.3", - "@babel/plugin-transform-spread": "^7.8.3", - "@babel/plugin-transform-sticky-regex": "^7.8.3", - "@babel/plugin-transform-template-literals": "^7.8.3", - "@babel/plugin-transform-typeof-symbol": "^7.8.4", - "@babel/plugin-transform-unicode-regex": "^7.8.3", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.9.0", - "browserslist": "^4.9.1", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", - "semver": "^5.5.0" - } - }, - "@babel/preset-react": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.9.1.tgz", - "integrity": "sha512-aJBYF23MPj0RNdp/4bHnAP0NVqqZRr9kl0NAOP4nJCex6OYVio59+dnQzsAWFuogdLyeaKA1hmfUIVZkY5J+TQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-transform-react-display-name": "^7.8.3", - "@babel/plugin-transform-react-jsx": "^7.9.1", - "@babel/plugin-transform-react-jsx-development": "^7.9.0", - "@babel/plugin-transform-react-jsx-self": "^7.9.0", - "@babel/plugin-transform-react-jsx-source": "^7.9.0" - } - }, - "@babel/runtime": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.0.tgz", - "integrity": "sha512-cTIudHnzuWLS56ik4DnRnqqNf8MkdUzV4iFFI1h7Jo9xvrpQROYaAnaSd2mHLQAzzZAPfATynX5ord6YlNYNMA==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - } - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.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==" - } - } - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "bn.js": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz", - "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==" - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" - } - } - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.13.0.tgz", - "integrity": "sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ==", - "requires": { - "caniuse-lite": "^1.0.30001093", - "electron-to-chromium": "^1.3.488", - "escalade": "^3.0.1", - "node-releases": "^1.1.58" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "cacache": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", - "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", - "requires": { - "chownr": "^1.1.2", - "figgy-pudding": "^3.5.1", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.2", - "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", - "minipass": "^3.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "p-map": "^3.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^2.7.1", - "ssri": "^7.0.0", - "unique-filename": "^1.1.1" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "requires": { - "callsites": "^2.0.0" - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" - }, - "camel-case": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz", - "integrity": "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==", - "requires": { - "pascal-case": "^3.1.1", - "tslib": "^1.10.0" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001111", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001111.tgz", - "integrity": "sha512-xnDje2wchd/8mlJu8sXvWxOGvMgv+uT3iZ3bkIAynKOzToCssWCmkz/ZIkQBs/2pUB4uwnJKVORWQ31UkbVjOg==" - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "requires": { - "rsvp": "^4.8.4" - } - }, - "case-sensitive-paths-webpack-plugin": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz", - "integrity": "sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ==" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, - "chokidar": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz", - "integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==", - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.4.0" - }, - "dependencies": { - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "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" - } - }, - "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" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "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" - } - } - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "requires": { - "tslib": "^1.9.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "requires": { - "source-map": "~0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "clone-deep": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", - "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=", - "requires": { - "for-own": "^0.1.3", - "is-plain-object": "^2.0.1", - "kind-of": "^3.0.2", - "lazy-cache": "^1.0.3", - "shallow-clone": "^0.1.2" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", - "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "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==", - "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": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" - }, - "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" - } - }, - "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==" - }, - "common-tags": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", - "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "compose-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", - "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", - "requires": { - "arity-n": "^1.0.4" - } - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "confusing-browser-globals": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz", - "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==" - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=" - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - }, - "core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", - "requires": { - "browserslist": "^4.8.5", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } - } - }, - "core-js-pure": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.5.tgz", - "integrity": "sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", - "requires": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "css-blank-pseudo": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", - "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", - "requires": { - "postcss": "^7.0.5" - } - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" - }, - "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", - "requires": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" - } - }, - "css-has-pseudo": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", - "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^5.0.0-rc.4" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "css-loader": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.4.2.tgz", - "integrity": "sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA==", - "requires": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.23", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.1.1", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.0.2", - "schema-utils": "^2.6.0" - }, - "dependencies": { - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - } - } - }, - "css-prefers-color-scheme": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", - "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", - "requires": { - "postcss": "^7.0.5" - } - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "css-what": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz", - "integrity": "sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg==" - }, - "css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=" - }, - "cssdb": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", - "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==" - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - }, - "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", - "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", - "requires": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.2", - "postcss-unique-selectors": "^4.0.1" - } - }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=" - }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=" - }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", - "requires": { - "postcss": "^7.0.0" - } - }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" - }, - "csso": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", - "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", - "requires": { - "css-tree": "1.0.0-alpha.39" - }, - "dependencies": { - "css-tree": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", - "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", - "requires": { - "mdn-data": "2.0.6", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", - "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - }, - "cssstyle": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", - "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", - "requires": { - "cssom": "0.3.x" - } - }, - "csstype": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.2.tgz", - "integrity": "sha512-ofovWglpqoqbfLNOTBNZLSbMuGrblAf1efvvArGKOZMBrIoJeu5UsAipQolkijtyQx5MtAzT/J9IHj/CEY1mJw==" - }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "damerau-levenshtein": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", - "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==" - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - }, - "dependencies": { - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.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==" - } - } - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "dependencies": { - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=" - }, - "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" - }, - "detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "diff-sequences": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", - "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==" - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", - "requires": { - "arrify": "^1.0.1", - "path-type": "^3.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" - }, - "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "requires": { - "buffer-indexof": "^1.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-accessibility-api": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.3.0.tgz", - "integrity": "sha512-PzwHEmsRP3IGY4gv/Ug+rMeaTIyTJvadCb+ujYXYeIylbHJezIyNToe8KfEgHTCEYyC+/bUghYOGg8yMGlZ6vA==" - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "requires": { - "utila": "~0.4" - } - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==" - } - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "requires": { - "webidl-conversions": "^4.0.2" - } - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "dot-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz", - "integrity": "sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==", - "requires": { - "no-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "dot-prop": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", - "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" - }, - "dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" - }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "electron-to-chromium": { - "version": "1.3.521", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.521.tgz", - "integrity": "sha512-7/Cf5jUuAfLRY8SjfRES/6+9BDvmHAB2YQotCAaXK0IEacpjoSlyosPoC4s7lfb7vIOBubXvsssu8+8qaRGjcg==" - }, - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "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==" - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==" - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "requires": { - "prr": "~1.0.1" - } - }, - "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==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "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==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escalade": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz", - "integrity": "sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true - } - } - }, - "eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "requires": { - "type-fest": "^0.8.1" - } - }, - "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" - }, - "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==" - } - } - }, - "eslint-config-react-app": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz", - "integrity": "sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==", - "requires": { - "confusing-browser-globals": "^1.0.9" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", - "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", - "requires": { - "debug": "^2.6.9", - "resolve": "^1.13.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "eslint-loader": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-3.0.3.tgz", - "integrity": "sha512-+YRqB95PnNvxNp1HEjQmvf9KNvCin5HXYYseOXVC2U0KEcw4IkQ2IQEBG46j7+gW39bMzeu0GsUhVbBY3Votpw==", - "requires": { - "fs-extra": "^8.1.0", - "loader-fs-cache": "^1.0.2", - "loader-utils": "^1.2.3", - "object-hash": "^2.0.1", - "schema-utils": "^2.6.1" - } - }, - "eslint-module-utils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", - "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", - "requires": { - "debug": "^2.6.9", - "pkg-dir": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "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": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "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": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "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": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "requires": { - "find-up": "^2.1.0" - } - } - } - }, - "eslint-plugin-flowtype": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-4.6.0.tgz", - "integrity": "sha512-W5hLjpFfZyZsXfo5anlu7HM970JBDqbEshAJUkeczP6BFCIfJXuiIBQXyberLRtOStT0OGPF8efeTbxlHk4LpQ==", - "requires": { - "lodash": "^4.17.15" - } - }, - "eslint-plugin-import": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz", - "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==", - "requires": { - "array-includes": "^3.0.3", - "array.prototype.flat": "^1.2.1", - "contains-path": "^0.1.0", - "debug": "^2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.4.1", - "has": "^1.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.0", - "read-pkg-up": "^2.0.0", - "resolve": "^1.12.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "requires": { - "locate-path": "^2.0.0" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "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": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "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": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "requires": { - "pify": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } - } - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz", - "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==", - "requires": { - "@babel/runtime": "^7.4.5", - "aria-query": "^3.0.0", - "array-includes": "^3.0.3", - "ast-types-flow": "^0.0.7", - "axobject-query": "^2.0.2", - "damerau-levenshtein": "^1.0.4", - "emoji-regex": "^7.0.2", - "has": "^1.0.3", - "jsx-ast-utils": "^2.2.1" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - } - } - }, - "eslint-plugin-react": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz", - "integrity": "sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ==", - "requires": { - "array-includes": "^3.1.1", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.2.3", - "object.entries": "^1.1.1", - "object.fromentries": "^2.0.2", - "object.values": "^1.1.1", - "prop-types": "^15.7.2", - "resolve": "^1.15.1", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.2", - "xregexp": "^4.3.0" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "requires": { - "path-parse": "^1.0.6" - } - } - } - }, - "eslint-plugin-react-hooks": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz", - "integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==" - }, - "eslint-scope": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", - "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" - }, - "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.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.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - } - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==" - }, - "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", - "requires": { - "original": "^1.0.0" - } - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==" - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "expect": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", - "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", - "requires": { - "@jest/types": "^24.9.0", - "ansi-styles": "^3.2.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.9.0" - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - } - } - }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", - "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==" - } - } - }, - "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": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.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==" - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "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": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", - "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - }, - "dependencies": { - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - } - } - } - } - }, - "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": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "requires": { - "bser": "2.1.1" - } - }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "requires": { - "flat-cache": "^2.0.1" - } - }, - "file-loader": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz", - "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==", - "requires": { - "loader-utils": "^1.2.3", - "schema-utils": "^2.5.0" - } - }, - "filesize": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.0.1.tgz", - "integrity": "sha512-u4AYWPgbI5GBhs6id1KdImZWn5yfyFrrQ8OWZdN7ZMfA8Bf4HcO0BGo9bmUIEV8yrp8I1xVfJ/dn90GtFNNJcg==" - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - } - }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" - }, - "flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==" - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "follow-redirects": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.12.1.tgz", - "integrity": "sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg==" - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "requires": { - "for-in": "^1.0.1" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "fork-ts-checker-webpack-plugin": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz", - "integrity": "sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ==", - "requires": { - "babel-code-frame": "^6.22.0", - "chalk": "^2.4.1", - "chokidar": "^3.3.0", - "micromatch": "^3.1.10", - "minimatch": "^3.0.4", - "semver": "^5.6.0", - "tapable": "^1.0.0", - "worker-rpc": "^0.1.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "requires": { - "minipass": "^3.0.0" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", - "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "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": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" - }, - "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==" - }, - "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==" - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "dependencies": { - "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==" - } - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "globby": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", - "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", - "requires": { - "array-union": "^1.0.1", - "dir-glob": "2.0.0", - "fast-glob": "^2.0.2", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - }, - "dependencies": { - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" - } - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" - }, - "gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", - "requires": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - } - } - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "harmony-reflect": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz", - "integrity": "sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA==" - }, - "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-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" - }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" - }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "requires": { - "whatwg-encoding": "^1.0.1" - } - }, - "html-entities": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", - "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==" - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "requires": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "dependencies": { - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" - } - } - }, - "html-webpack-plugin": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.11.tgz", - "integrity": "sha512-4Xzepf0qWxf8CGg7/WQM5qBB2Lc/NFI7MhU59eUDTkuQp3skZczH4UA1d6oQyDEIoMDgERVhRyTdtUPZ5s5HBg==", - "requires": { - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.15", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" - }, - "dependencies": { - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - } - } - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - } - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "http-parser-js": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.2.tgz", - "integrity": "sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ==" - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", - "requires": { - "postcss": "^7.0.14" - } - }, - "identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=", - "requires": { - "harmony-reflect": "^1.4.6" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" - }, - "immer": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", - "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==" - }, - "import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", - "requires": { - "import-from": "^2.1.0" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", - "requires": { - "resolve-from": "^3.0.0" - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "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==" - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "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==" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - } - }, - "internal-slot": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", - "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", - "requires": { - "es-abstract": "^1.17.0-next.1", - "has": "^1.0.3", - "side-channel": "^1.0.2" - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "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-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==" - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" - }, - "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==" - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "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==" - }, - "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==" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" - }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "requires": { - "is-path-inside": "^2.1.0" - } - }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "requires": { - "path-is-inside": "^1.0.2" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" - }, - "is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==" - }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", - "requires": { - "html-comment-regex": "^1.1.0" - } - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==" - }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - } - }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", - "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "istanbul-reports": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", - "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", - "requires": { - "html-escaper": "^2.0.0" - } - }, - "jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", - "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", - "requires": { - "import-local": "^2.0.0", - "jest-cli": "^24.9.0" - }, - "dependencies": { - "jest-cli": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", - "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", - "requires": { - "@jest/core": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "import-local": "^2.0.0", - "is-ci": "^2.0.0", - "jest-config": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "prompts": "^2.0.1", - "realpath-native": "^1.1.0", - "yargs": "^13.3.0" - } - } - } - }, - "jest-changed-files": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", - "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", - "requires": { - "@jest/types": "^24.9.0", - "execa": "^1.0.0", - "throat": "^4.0.0" - } - }, - "jest-config": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", - "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.9.0", - "@jest/types": "^24.9.0", - "babel-jest": "^24.9.0", - "chalk": "^2.0.1", - "glob": "^7.1.1", - "jest-environment-jsdom": "^24.9.0", - "jest-environment-node": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "micromatch": "^3.1.10", - "pretty-format": "^24.9.0", - "realpath-native": "^1.1.0" - } - }, - "jest-diff": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", - "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", - "requires": { - "chalk": "^2.0.1", - "diff-sequences": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-docblock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", - "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", - "requires": { - "detect-newline": "^2.1.0" - } - }, - "jest-each": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", - "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", - "requires": { - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-environment-jsdom": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", - "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", - "requires": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0", - "jsdom": "^11.5.1" - } - }, - "jest-environment-jsdom-fourteen": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom-fourteen/-/jest-environment-jsdom-fourteen-1.0.1.tgz", - "integrity": "sha512-DojMX1sY+at5Ep+O9yME34CdidZnO3/zfPh8UW+918C5fIZET5vCjfkegixmsi7AtdYfkr4bPlIzmWnlvQkP7Q==", - "requires": { - "@jest/environment": "^24.3.0", - "@jest/fake-timers": "^24.3.0", - "@jest/types": "^24.3.0", - "jest-mock": "^24.0.0", - "jest-util": "^24.0.0", - "jsdom": "^14.1.0" - }, - "dependencies": { - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==" - }, - "jsdom": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz", - "integrity": "sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==", - "requires": { - "abab": "^2.0.0", - "acorn": "^6.0.4", - "acorn-globals": "^4.3.0", - "array-equal": "^1.0.0", - "cssom": "^0.3.4", - "cssstyle": "^1.1.1", - "data-urls": "^1.1.0", - "domexception": "^1.0.1", - "escodegen": "^1.11.0", - "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.1.3", - "parse5": "5.1.0", - "pn": "^1.1.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.5", - "saxes": "^3.1.9", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.5.0", - "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.1.2", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^7.0.0", - "ws": "^6.1.2", - "xml-name-validator": "^3.0.0" - } - }, - "parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==" - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "jest-environment-node": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", - "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", - "requires": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0" - } - }, - "jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==" - }, - "jest-haste-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", - "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", - "requires": { - "@jest/types": "^24.9.0", - "anymatch": "^2.0.0", - "fb-watchman": "^2.0.0", - "fsevents": "^1.2.7", - "graceful-fs": "^4.1.15", - "invariant": "^2.2.4", - "jest-serializer": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.9.0", - "micromatch": "^3.1.10", - "sane": "^4.0.3", - "walker": "^1.0.7" - }, - "dependencies": { - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true - } - } - }, - "jest-jasmine2": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", - "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "co": "^4.6.0", - "expect": "^24.9.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0", - "throat": "^4.0.0" - } - }, - "jest-leak-detector": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", - "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", - "requires": { - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-matcher-utils": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", - "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", - "requires": { - "chalk": "^2.0.1", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-message-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", - "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^2.0.1", - "micromatch": "^3.1.10", - "slash": "^2.0.0", - "stack-utils": "^1.0.1" - } - }, - "jest-mock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", - "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", - "requires": { - "@jest/types": "^24.9.0" - } - }, - "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==" - }, - "jest-regex-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", - "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==" - }, - "jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", - "requires": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - }, - "jest-resolve-dependencies": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", - "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", - "requires": { - "@jest/types": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.9.0" - } - }, - "jest-runner": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", - "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.4.2", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-leak-detector": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "source-map-support": "^0.5.6", - "throat": "^4.0.0" - } - }, - "jest-runtime": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", - "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "strip-bom": "^3.0.0", - "yargs": "^13.3.0" - } - }, - "jest-serializer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", - "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==" - }, - "jest-snapshot": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", - "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "expect": "^24.9.0", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^24.9.0", - "semver": "^6.2.0" - } - }, - "jest-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", - "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", - "requires": { - "@jest/console": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/source-map": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "callsites": "^3.0.0", - "chalk": "^2.0.1", - "graceful-fs": "^4.1.15", - "is-ci": "^2.0.0", - "mkdirp": "^0.5.1", - "slash": "^2.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "jest-validate": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", - "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", - "requires": { - "@jest/types": "^24.9.0", - "camelcase": "^5.3.1", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "leven": "^3.1.0", - "pretty-format": "^24.9.0" - } - }, - "jest-watch-typeahead": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.4.2.tgz", - "integrity": "sha512-f7VpLebTdaXs81rg/oj4Vg/ObZy2QtGzAmGLNsqUS5G5KtSN68tFcIsbvNODfNyQxU78g7D8x77o3bgfBTR+2Q==", - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^2.4.1", - "jest-regex-util": "^24.9.0", - "jest-watcher": "^24.3.0", - "slash": "^3.0.0", - "string-length": "^3.1.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "string-length": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", - "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", - "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^5.2.0" - } - } - } - }, - "jest-watcher": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", - "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", - "requires": { - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "jest-util": "^24.9.0", - "string-length": "^2.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" - } - } - }, - "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.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.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", - "requires": { - "abab": "^2.0.0", - "acorn": "^5.5.3", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": "^1.0.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.1", - "escodegen": "^1.9.1", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.3.0", - "nwsapi": "^2.0.7", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.4", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^5.2.0", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" - } - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "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": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "requires": { - "jsonify": "~0.0.0" - } - }, - "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "jsx-ast-utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz", - "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==", - "requires": { - "array-includes": "^3.1.1", - "object.assign": "^4.1.0" - } - }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" - }, - "last-call-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", - "requires": { - "lodash": "^4.17.5", - "webpack-sources": "^1.1.0" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "requires": { - "invert-kv": "^2.0.0" - } - }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==" - }, - "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==" - }, - "levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", - "requires": { - "leven": "^3.1.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "loader-fs-cache": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", - "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", - "requires": { - "find-cache-dir": "^0.1.1", - "mkdirp": "^0.5.1" - }, - "dependencies": { - "find-cache-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", - "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", - "requires": { - "commondir": "^1.0.1", - "mkdirp": "^0.5.1", - "pkg-dir": "^1.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "requires": { - "find-up": "^1.0.0" - } - } - } - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "requires": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, - "loglevel": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", - "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==" - }, - "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" - } - }, - "lower-case": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz", - "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==", - "requires": { - "tslib": "^1.10.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - }, - "dependencies": { - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - } - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "requires": { - "tmpl": "1.0.x" - } - }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==" - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "requires": { - "p-defer": "^1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "merge-deep": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", - "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==", - "requires": { - "arr-union": "^3.1.0", - "clone-deep": "^0.2.4", - "kind-of": "^3.0.2" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "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==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "microevent.ts": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", - "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "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==" - } - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "requires": { - "mime-db": "1.44.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" - }, - "mini-css-extract-plugin": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", - "integrity": "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==", - "requires": { - "loader-utils": "^1.1.0", - "normalize-url": "1.9.1", - "schema-utils": "^1.0.0", - "webpack-sources": "^1.1.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "requires": { - "minipass": "^3.0.0" - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", - "requires": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" - }, - "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=" - } - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "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==" - } - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "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==" - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "no-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz", - "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==", - "requires": { - "lower-case": "^2.0.1", - "tslib": "^1.10.0" - } - }, - "node-forge": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", - "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==" - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - } - } - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" - }, - "node-notifier": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", - "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", - "requires": { - "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", - "shellwords": "^0.1.1", - "which": "^1.3.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "node-releases": { - "version": "1.1.60", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", - "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==" - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" - }, - "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "requires": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "requires": { - "boolbase": "~1.0.0" - } - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "object-hash": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.0.3.tgz", - "integrity": "sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg==" - }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" - }, - "object-is": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", - "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object-path": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", - "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.entries": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", - "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "has": "^1.0.3" - } - }, - "object.fromentries": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz", - "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "^3.0.1" - } - }, - "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.1.tgz", - "integrity": "sha512-ZpZpjcJeugQfWsfyQlshVoowIIQ1qBGSVll4rfDq6JJVO//fesjoX808hXWfBjY+ROZgpKDI5TRSRBSoJiZ8eg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-7.1.0.tgz", - "integrity": "sha512-lLPI5KgOwEYCDKXf4np7y1PBEkj7HYIyP2DY8mVDRnx0VIIu6bNrRB0R66TuO7Mack6EnTNLm4uvcl1UoklTpA==", - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "dependencies": { - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "requires": { - "is-docker": "^2.0.0" - } - } - } - }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "requires": { - "is-wsl": "^1.1.0" - } - }, - "optimize-css-assets-webpack-plugin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", - "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", - "requires": { - "cssnano": "^4.1.10", - "last-call-webpack-plugin": "^3.0.0" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "requires": { - "url-parse": "^1.4.3" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" - }, - "p-each-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", - "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", - "requires": { - "p-reduce": "^1.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=" - }, - "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", - "requires": { - "retry": "^0.12.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==" - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "param-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz", - "integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==", - "requires": { - "dot-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "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==", - "requires": { - "callsites": "^3.0.0" - }, - "dependencies": { - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - } - } - }, - "parse-asn1": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascal-case": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz", - "integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==", - "requires": { - "no-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "requires": { - "pify": "^3.0.0" - } - }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "^2.0.0" - } - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "requires": { - "find-up": "^3.0.0" - } - }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "requires": { - "find-up": "^3.0.0" - } - }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" - }, - "pnp-webpack-plugin": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", - "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", - "requires": { - "ts-pnp": "^1.1.6" - } - }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - }, - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-attribute-case-insensitive": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", - "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^6.0.2" - } - }, - "postcss-browser-comments": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-3.0.0.tgz", - "integrity": "sha512-qfVjLfq7HFd2e0HW4s1dvU8X080OZdG46fFbIBFjW7US7YPDcWfRvdElvwMJr2LI6hMmD+7LnH2HcmXTs+uOig==", - "requires": { - "postcss": "^7" - } - }, - "postcss-calc": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz", - "integrity": "sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==", - "requires": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - } - }, - "postcss-color-functional-notation": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", - "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-gray": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", - "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-hex-alpha": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", - "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", - "requires": { - "postcss": "^7.0.14", - "postcss-values-parser": "^2.0.1" - } - }, - "postcss-color-mod-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", - "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-rebeccapurple": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", - "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-custom-media": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", - "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", - "requires": { - "postcss": "^7.0.14" - } - }, - "postcss-custom-properties": { - "version": "8.0.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", - "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", - "requires": { - "postcss": "^7.0.17", - "postcss-values-parser": "^2.0.1" - } - }, - "postcss-custom-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", - "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-dir-pseudo-class": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", - "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-double-position-gradients": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", - "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", - "requires": { - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-env-function": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", - "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-flexbugs-fixes": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.1.0.tgz", - "integrity": "sha512-jr1LHxQvStNNAHlgco6PzY308zvLklh7SJVYuWUwyUQncofaAlD2l+P/gxKHOdqWKe7xJSkVLFF/2Tp+JqMSZA==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-focus-visible": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", - "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-focus-within": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", - "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-font-variant": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz", - "integrity": "sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-gap-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", - "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-image-set-function": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", - "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-initial": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.2.tgz", - "integrity": "sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==", - "requires": { - "lodash.template": "^4.5.0", - "postcss": "^7.0.2" - } - }, - "postcss-lab-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", - "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-load-config": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", - "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", - "requires": { - "cosmiconfig": "^5.0.0", - "import-cwd": "^2.0.0" - } - }, - "postcss-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", - "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", - "requires": { - "loader-utils": "^1.1.0", - "postcss": "^7.0.0", - "postcss-load-config": "^2.0.0", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "postcss-logical": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", - "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-media-minmax": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", - "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", - "requires": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", - "requires": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", - "requires": { - "postcss": "^7.0.5" - } - }, - "postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", - "requires": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - } - }, - "postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", - "requires": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" - } - }, - "postcss-nesting": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", - "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-normalize": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-8.0.1.tgz", - "integrity": "sha512-rt9JMS/m9FHIRroDDBGSMsyW1c0fkvOJPy62ggxSHUldJO7B195TqFMqIf+lY5ezpDcYOV4j86aUp3/XbxzCCQ==", - "requires": { - "@csstools/normalize.css": "^10.1.0", - "browserslist": "^4.6.2", - "postcss": "^7.0.17", - "postcss-browser-comments": "^3.0.0", - "sanitize.css": "^10.0.0" - } - }, - "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", - "requires": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", - "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-overflow-shorthand": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", - "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-page-break": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", - "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-place": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", - "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-preset-env": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", - "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", - "requires": { - "autoprefixer": "^9.6.1", - "browserslist": "^4.6.4", - "caniuse-lite": "^1.0.30000981", - "css-blank-pseudo": "^0.1.4", - "css-has-pseudo": "^0.10.0", - "css-prefers-color-scheme": "^3.1.1", - "cssdb": "^4.4.0", - "postcss": "^7.0.17", - "postcss-attribute-case-insensitive": "^4.0.1", - "postcss-color-functional-notation": "^2.0.1", - "postcss-color-gray": "^5.0.0", - "postcss-color-hex-alpha": "^5.0.3", - "postcss-color-mod-function": "^3.0.3", - "postcss-color-rebeccapurple": "^4.0.1", - "postcss-custom-media": "^7.0.8", - "postcss-custom-properties": "^8.0.11", - "postcss-custom-selectors": "^5.1.2", - "postcss-dir-pseudo-class": "^5.0.0", - "postcss-double-position-gradients": "^1.0.0", - "postcss-env-function": "^2.0.2", - "postcss-focus-visible": "^4.0.0", - "postcss-focus-within": "^3.0.0", - "postcss-font-variant": "^4.0.0", - "postcss-gap-properties": "^2.0.0", - "postcss-image-set-function": "^3.0.1", - "postcss-initial": "^3.0.0", - "postcss-lab-function": "^2.0.1", - "postcss-logical": "^3.0.0", - "postcss-media-minmax": "^4.0.0", - "postcss-nesting": "^7.0.0", - "postcss-overflow-shorthand": "^2.0.0", - "postcss-page-break": "^2.0.0", - "postcss-place": "^4.0.1", - "postcss-pseudo-class-any-link": "^6.0.0", - "postcss-replace-overflow-wrap": "^3.0.0", - "postcss-selector-matches": "^4.0.0", - "postcss-selector-not": "^4.0.0" - } - }, - "postcss-pseudo-class-any-link": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", - "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", - "requires": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-replace-overflow-wrap": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", - "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-safe-parser": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz", - "integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-selector-matches": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", - "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", - "requires": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - } - }, - "postcss-selector-not": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz", - "integrity": "sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ==", - "requires": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - } - }, - "postcss-selector-parser": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", - "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", - "requires": { - "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", - "requires": { - "is-svg": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", - "requires": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" - } - }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, - "postcss-values-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", - "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", - "requires": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "pretty-bytes": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.3.0.tgz", - "integrity": "sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg==" - }, - "pretty-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", - "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", - "requires": { - "renderkid": "^2.0.1", - "utila": "~0.4" - } - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - } - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - }, - "promise": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", - "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", - "requires": { - "asap": "~2.0.6" - } - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" - }, - "prompts": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", - "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==", - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.4" - } - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "requires": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" - }, - "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" - }, - "raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "requires": { - "performance-now": "^2.1.0" - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - } - } - }, - "react": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", - "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - } - }, - "react-app-polyfill": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.6.tgz", - "integrity": "sha512-OfBnObtnGgLGfweORmdZbyEz+3dgVePQBb3zipiaDsMHV1NpWm0rDFYIVXFV/AK+x4VIIfWHhrdMIeoTLyRr2g==", - "requires": { - "core-js": "^3.5.0", - "object-assign": "^4.1.1", - "promise": "^8.0.3", - "raf": "^3.4.1", - "regenerator-runtime": "^0.13.3", - "whatwg-fetch": "^3.0.0" - } - }, - "react-dev-utils": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-10.2.1.tgz", - "integrity": "sha512-XxTbgJnYZmxuPtY3y/UV0D8/65NKkmaia4rXzViknVnZeVlklSh8u6TnaEYPfAi/Gh1TP4mEOXHI6jQOPbeakQ==", - "requires": { - "@babel/code-frame": "7.8.3", - "address": "1.1.2", - "browserslist": "4.10.0", - "chalk": "2.4.2", - "cross-spawn": "7.0.1", - "detect-port-alt": "1.1.6", - "escape-string-regexp": "2.0.0", - "filesize": "6.0.1", - "find-up": "4.1.0", - "fork-ts-checker-webpack-plugin": "3.1.1", - "global-modules": "2.0.0", - "globby": "8.0.2", - "gzip-size": "5.1.1", - "immer": "1.10.0", - "inquirer": "7.0.4", - "is-root": "2.1.0", - "loader-utils": "1.2.3", - "open": "^7.0.2", - "pkg-up": "3.1.0", - "react-error-overlay": "^6.0.7", - "recursive-readdir": "2.2.2", - "shell-quote": "1.7.2", - "strip-ansi": "6.0.0", - "text-table": "0.2.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "browserslist": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.10.0.tgz", - "integrity": "sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA==", - "requires": { - "caniuse-lite": "^1.0.30001035", - "electron-to-chromium": "^1.3.378", - "node-releases": "^1.1.52", - "pkg-up": "^3.1.0" - } - }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" - }, - "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" - }, - "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==" - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "inquirer": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz", - "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==", - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^2.4.2", - "cli-cursor": "^3.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.15", - "mute-stream": "0.0.8", - "run-async": "^2.2.0", - "rxjs": "^6.5.3", - "string-width": "^4.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "dependencies": { - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.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==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "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==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "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==", - "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==" - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - } - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "react-dom": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", - "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" - } - }, - "react-error-overlay": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.7.tgz", - "integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==" - }, - "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==" - }, - "react-scripts": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.4.1.tgz", - "integrity": "sha512-JpTdi/0Sfd31mZA6Ukx+lq5j1JoKItX7qqEK4OiACjVQletM1P38g49d9/D0yTxp9FrSF+xpJFStkGgKEIRjlQ==", - "requires": { - "@babel/core": "7.9.0", - "@svgr/webpack": "4.3.3", - "@typescript-eslint/eslint-plugin": "^2.10.0", - "@typescript-eslint/parser": "^2.10.0", - "babel-eslint": "10.1.0", - "babel-jest": "^24.9.0", - "babel-loader": "8.1.0", - "babel-plugin-named-asset-import": "^0.3.6", - "babel-preset-react-app": "^9.1.2", - "camelcase": "^5.3.1", - "case-sensitive-paths-webpack-plugin": "2.3.0", - "css-loader": "3.4.2", - "dotenv": "8.2.0", - "dotenv-expand": "5.1.0", - "eslint": "^6.6.0", - "eslint-config-react-app": "^5.2.1", - "eslint-loader": "3.0.3", - "eslint-plugin-flowtype": "4.6.0", - "eslint-plugin-import": "2.20.1", - "eslint-plugin-jsx-a11y": "6.2.3", - "eslint-plugin-react": "7.19.0", - "eslint-plugin-react-hooks": "^1.6.1", - "file-loader": "4.3.0", - "fs-extra": "^8.1.0", - "fsevents": "2.1.2", - "html-webpack-plugin": "4.0.0-beta.11", - "identity-obj-proxy": "3.0.0", - "jest": "24.9.0", - "jest-environment-jsdom-fourteen": "1.0.1", - "jest-resolve": "24.9.0", - "jest-watch-typeahead": "0.4.2", - "mini-css-extract-plugin": "0.9.0", - "optimize-css-assets-webpack-plugin": "5.0.3", - "pnp-webpack-plugin": "1.6.4", - "postcss-flexbugs-fixes": "4.1.0", - "postcss-loader": "3.0.0", - "postcss-normalize": "8.0.1", - "postcss-preset-env": "6.7.0", - "postcss-safe-parser": "4.0.1", - "react-app-polyfill": "^1.0.6", - "react-dev-utils": "^10.2.1", - "resolve": "1.15.0", - "resolve-url-loader": "3.1.1", - "sass-loader": "8.0.2", - "semver": "6.3.0", - "style-loader": "0.23.1", - "terser-webpack-plugin": "2.3.5", - "ts-pnp": "1.1.6", - "url-loader": "2.3.0", - "webpack": "4.42.0", - "webpack-dev-server": "3.10.3", - "webpack-manifest-plugin": "2.2.0", - "workbox-webpack-plugin": "4.3.1" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", - "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "realpath-native": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", - "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", - "requires": { - "util.promisify": "^1.0.0" - } - }, - "recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", - "requires": { - "minimatch": "3.0.4" - } - }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - } - }, - "regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==" - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regex-parser": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz", - "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==" - }, - "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==" - }, - "regexpu-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", - "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - } - }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" - }, - "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "renderkid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", - "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", - "requires": { - "css-select": "^1.1.0", - "dom-converter": "^0.2", - "htmlparser2": "^3.3.0", - "strip-ansi": "^3.0.0", - "utila": "^0.4.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "requires": { - "lodash": "^4.17.19" - } - }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "resolve": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz", - "integrity": "sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw==", - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, - "resolve-url-loader": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz", - "integrity": "sha512-K1N5xUjj7v0l2j/3Sgs5b8CjrrgtC70SmdCuZiJ8tSyb5J+uk3FoeZ4b7yTnH6j7ngI+Bc5bldHJIa8hYdu2gQ==", - "requires": { - "adjust-sourcemap-loader": "2.0.0", - "camelcase": "5.3.1", - "compose-function": "3.0.3", - "convert-source-map": "1.7.0", - "es6-iterator": "2.0.3", - "loader-utils": "1.2.3", - "postcss": "7.0.21", - "rework": "1.0.1", - "rework-visit": "1.0.0", - "source-map": "0.6.1" - }, - "dependencies": { - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "postcss": { - "version": "7.0.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", - "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" - }, - "rework": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", - "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", - "requires": { - "convert-source-map": "^0.3.3", - "css": "^2.0.0" - }, - "dependencies": { - "convert-source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", - "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=" - } - } - }, - "rework-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", - "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=" - }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "requires": { - "aproba": "^1.1.1" - } - }, - "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "requires": { - "tslib": "^1.9.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==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - } - }, - "sanitize.css": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-10.0.0.tgz", - "integrity": "sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg==" - }, - "sass-loader": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", - "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", - "requires": { - "clone-deep": "^4.0.1", - "loader-utils": "^1.2.3", - "neo-async": "^2.6.1", - "schema-utils": "^2.6.1", - "semver": "^6.3.0" - }, - "dependencies": { - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "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==" - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "requires": { - "kind-of": "^6.0.2" - } - } - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "saxes": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", - "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", - "requires": { - "xmlchars": "^2.1.1" - } - }, - "scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" - }, - "selfsigned": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", - "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", - "requires": { - "node-forge": "0.9.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "serialize-javascript": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", - "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==" - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shallow-clone": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", - "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", - "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^2.0.1", - "lazy-cache": "^0.2.3", - "mixin-object": "^2.0.1" - }, - "dependencies": { - "kind-of": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", - "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", - "requires": { - "is-buffer": "^1.0.2" - } - }, - "lazy-cache": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", - "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=" - } - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" - }, - "side-channel": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz", - "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==", - "requires": { - "es-abstract": "^1.17.0-next.1", - "object-inspect": "^1.7.0" - } - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - } - } - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - } - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.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==" - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "requires": { - "kind-of": "^3.2.0" - } - }, - "sockjs": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", - "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", - "requires": { - "faye-websocket": "^0.10.0", - "uuid": "^3.0.1" - } - }, - "sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", - "requires": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", - "requires": { - "websocket-driver": ">=0.5.1" - } - } - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "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-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz", - "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==", - "requires": { - "figgy-pudding": "^3.5.1", - "minipass": "^3.1.1" - } - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" - }, - "stack-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", - "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==" - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" - }, - "string-length": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", - "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", - "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "string.prototype.matchall": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz", - "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", - "has-symbols": "^1.0.1", - "internal-slot": "^1.0.2", - "regexp.prototype.flags": "^1.3.0", - "side-channel": "^1.0.2" - } - }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "dependencies": { - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" - } - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - } - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - }, - "strip-comments": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz", - "integrity": "sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==", - "requires": { - "babel-extract-comments": "^1.0.0", - "babel-plugin-transform-object-rest-spread": "^6.26.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "requires": { - "min-indent": "^1.0.0" - } - }, - "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==" - }, - "style-loader": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", - "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", - "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" - }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "terser-webpack-plugin": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.5.tgz", - "integrity": "sha512-WlWksUoq+E4+JlJ+h+U+QUzXpcsMSSNXkDy9lBVkSqDn1w23Gg29L/ary9GeJVYCGiNJJX7LnVc4bwL1N3/g1w==", - "requires": { - "cacache": "^13.0.1", - "find-cache-dir": "^3.2.0", - "jest-worker": "^25.1.0", - "p-limit": "^2.2.2", - "schema-utils": "^2.6.4", - "serialize-javascript": "^2.1.2", - "source-map": "^0.6.1", - "terser": "^4.4.3", - "webpack-sources": "^1.4.3" - }, - "dependencies": { - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-worker": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", - "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "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==", - "requires": { - "semver": "^6.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==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "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==" - }, - "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==", - "requires": { - "find-up": "^4.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=" - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", - "requires": { - "setimmediate": "^1.0.4" - } - }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "requires": { - "punycode": "^2.1.0" - } - }, - "ts-pnp": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.6.tgz", - "integrity": "sha512-CrG5GqAAzMT7144Cl+UIFP7mz/iIhiy+xQ6GGcnjTezhALT02uPMRw7tgDSESgB5MsfKt55+GPWw4ir1kVtMIQ==" - }, - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - }, - "tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", - "requires": { - "tslib": "^1.8.1" - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "typescript": { - "version": "3.7.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.5.tgz", - "integrity": "sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==" - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" - }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" - }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - } - } - }, - "url-loader": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.3.0.tgz", - "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==", - "requires": { - "loader-utils": "^1.2.3", - "mime": "^2.4.4", - "schema-utils": "^2.5.0" - } - }, - "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, - "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==" - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", - "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", - "requires": { - "domexception": "^1.0.1", - "webidl-conversions": "^4.0.2", - "xml-name-validator": "^3.0.0" - } - }, - "wait-for-expect": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/wait-for-expect/-/wait-for-expect-3.0.2.tgz", - "integrity": "sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag==" - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "requires": { - "makeerror": "1.0.x" - } - }, - "watchpack": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", - "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.0" - } - }, - "watchpack-chokidar2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", - "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", - "optional": true, - "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "optional": true - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "optional": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "webpack": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.0.tgz", - "integrity": "sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "acorn": "^6.2.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.1", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.0", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==" - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "serialize-javascript": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", - "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "terser-webpack-plugin": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz", - "integrity": "sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA==", - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^3.1.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - } - } - } - }, - "webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - } - }, - "webpack-dev-server": { - "version": "3.10.3", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.10.3.tgz", - "integrity": "sha512-e4nWev8YzEVNdOMcNzNeCN947sWJNd43E5XvsJzbAL08kGc2frm1tQ32hTJslRS+H65LCb/AaUCYU7fjHCpDeQ==", - "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.2.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.6", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.25", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.7", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "0.3.19", - "sockjs-client": "1.4.0", - "spdy": "^4.0.1", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "12.0.5" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "requires": { - "async-limiter": "~1.0.0" - } - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "webpack-manifest-plugin": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz", - "integrity": "sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ==", - "requires": { - "fs-extra": "^7.0.0", - "lodash": ">=3.5 <5", - "object.entries": "^1.1.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-fetch": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.3.1.tgz", - "integrity": "sha512-faXTmGDcLuEPBpJwb5LQfyxvubKiE+RlbmmweFGKjvIPFj4uHTTfdtTIkdTRhC6OSH9S9eyYbx8kZ0UEaQqYTA==" - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" - }, - "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "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==" - }, - "workbox-background-sync": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz", - "integrity": "sha512-1uFkvU8JXi7L7fCHVBEEnc3asPpiAL33kO495UMcD5+arew9IbKW2rV5lpzhoWcm/qhGB89YfO4PmB/0hQwPRg==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-broadcast-update": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-4.3.1.tgz", - "integrity": "sha512-MTSfgzIljpKLTBPROo4IpKjESD86pPFlZwlvVG32Kb70hW+aob4Jxpblud8EhNb1/L5m43DUM4q7C+W6eQMMbA==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-build": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-4.3.1.tgz", - "integrity": "sha512-UHdwrN3FrDvicM3AqJS/J07X0KXj67R8Cg0waq1MKEOqzo89ap6zh6LmaLnRAjpB+bDIz+7OlPye9iii9KBnxw==", - "requires": { - "@babel/runtime": "^7.3.4", - "@hapi/joi": "^15.0.0", - "common-tags": "^1.8.0", - "fs-extra": "^4.0.2", - "glob": "^7.1.3", - "lodash.template": "^4.4.0", - "pretty-bytes": "^5.1.0", - "stringify-object": "^3.3.0", - "strip-comments": "^1.0.2", - "workbox-background-sync": "^4.3.1", - "workbox-broadcast-update": "^4.3.1", - "workbox-cacheable-response": "^4.3.1", - "workbox-core": "^4.3.1", - "workbox-expiration": "^4.3.1", - "workbox-google-analytics": "^4.3.1", - "workbox-navigation-preload": "^4.3.1", - "workbox-precaching": "^4.3.1", - "workbox-range-requests": "^4.3.1", - "workbox-routing": "^4.3.1", - "workbox-strategies": "^4.3.1", - "workbox-streams": "^4.3.1", - "workbox-sw": "^4.3.1", - "workbox-window": "^4.3.1" - }, - "dependencies": { - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "workbox-cacheable-response": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz", - "integrity": "sha512-Rp5qlzm6z8IOvnQNkCdO9qrDgDpoPNguovs0H8C+wswLuPgSzSp9p2afb5maUt9R1uTIwOXrVQMmPfPypv+npw==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-core": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz", - "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg==" - }, - "workbox-expiration": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-4.3.1.tgz", - "integrity": "sha512-vsJLhgQsQouv9m0rpbXubT5jw0jMQdjpkum0uT+d9tTwhXcEZks7qLfQ9dGSaufTD2eimxbUOJfWLbNQpIDMPw==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-google-analytics": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz", - "integrity": "sha512-xzCjAoKuOb55CBSwQrbyWBKqp35yg1vw9ohIlU2wTy06ZrYfJ8rKochb1MSGlnoBfXGWss3UPzxR5QL5guIFdg==", - "requires": { - "workbox-background-sync": "^4.3.1", - "workbox-core": "^4.3.1", - "workbox-routing": "^4.3.1", - "workbox-strategies": "^4.3.1" - } - }, - "workbox-navigation-preload": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz", - "integrity": "sha512-K076n3oFHYp16/C+F8CwrRqD25GitA6Rkd6+qAmLmMv1QHPI2jfDwYqrytOfKfYq42bYtW8Pr21ejZX7GvALOw==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-precaching": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-4.3.1.tgz", - "integrity": "sha512-piSg/2csPoIi/vPpp48t1q5JLYjMkmg5gsXBQkh/QYapCdVwwmKlU9mHdmy52KsDGIjVaqEUMFvEzn2LRaigqQ==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-range-requests": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz", - "integrity": "sha512-S+HhL9+iTFypJZ/yQSl/x2Bf5pWnbXdd3j57xnb0V60FW1LVn9LRZkPtneODklzYuFZv7qK6riZ5BNyc0R0jZA==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-routing": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-4.3.1.tgz", - "integrity": "sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-strategies": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-4.3.1.tgz", - "integrity": "sha512-F/+E57BmVG8dX6dCCopBlkDvvhg/zj6VDs0PigYwSN23L8hseSRwljrceU2WzTvk/+BSYICsWmRq5qHS2UYzhw==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-streams": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-4.3.1.tgz", - "integrity": "sha512-4Kisis1f/y0ihf4l3u/+ndMkJkIT4/6UOacU3A4BwZSAC9pQ9vSvJpIi/WFGQRH/uPXvuVjF5c2RfIPQFSS2uA==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-sw": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-4.3.1.tgz", - "integrity": "sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w==" - }, - "workbox-webpack-plugin": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-4.3.1.tgz", - "integrity": "sha512-gJ9jd8Mb8wHLbRz9ZvGN57IAmknOipD3W4XNE/Lk/4lqs5Htw4WOQgakQy/o/4CoXQlMCYldaqUg+EJ35l9MEQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "json-stable-stringify": "^1.0.1", - "workbox-build": "^4.3.1" - } - }, - "workbox-window": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-4.3.1.tgz", - "integrity": "sha512-C5gWKh6I58w3GeSc0wp2Ne+rqVw8qwcmZnQGpjiek8A2wpbxSJb1FdCoQVO+jDJs35bFgo/WETgl1fqgsxN0Hg==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "requires": { - "errno": "~0.1.7" - } - }, - "worker-rpc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", - "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", - "requires": { - "microevent.ts": "~0.1.1" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "requires": { - "mkdirp": "^0.5.1" - } - }, - "write-file-atomic": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", - "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, - "xregexp": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.3.0.tgz", - "integrity": "sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g==", - "requires": { - "@babel/runtime-corejs3": "^7.8.3" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } -} diff --git a/package.json b/package.json index 6020578..1cd0d8b 100644 --- a/package.json +++ b/package.json @@ -1,25 +1,73 @@ { "name": "kristweb2", - "version": "0.1.0", + "version": "2.0.0-dev", + "description": "Client-side web wallet for Krist", + "homepage": "https://krist.club", + "license": "AGPL-3.0-only", + "repository": { + "type": "git", + "url": "https://github.com/tmpim/KristWeb2.git" + }, + "author": "Lemmmy", + "defaultSyncNode": "https://krist.ceriat.net", + "supportURL": "https://donate.lemmmy.pw", + "supportersURL": "https://donate.lemmmy.pw/supporters.json", + "translateURL": "https://github.com/tmpim/KristWeb2/blob/master/README.md#contributing-translations", "private": true, "dependencies": { - "@testing-library/jest-dom": "^4.2.4", - "@testing-library/react": "^9.5.0", - "@testing-library/user-event": "^7.2.1", - "@types/jest": "^24.9.1", - "@types/node": "^12.12.53", - "@types/react": "^16.9.44", - "@types/react-dom": "^16.9.8", - "react": "^16.13.1", - "react-dom": "^16.13.1", - "react-scripts": "3.4.1", - "typescript": "^3.7.5" + "@ant-design/icons": "^4.5.0", + "@testing-library/jest-dom": "^5.11.9", + "@testing-library/react": "^11.2.5", + "@testing-library/user-event": "^12.8.3", + "antd": "^4.14.0", + "async-mutex": "^0.3.1", + "await-to-js": "^2.1.1", + "base64-arraybuffer": "^0.2.0", + "chart.js": "^2.9.4", + "classnames": "^2.2.6", + "csv-stringify": "^5.6.2", + "dayjs": "^1.10.4", + "debug": "^4.3.1", + "file-saver": "^2.0.5", + "i18next": "^19.9.2", + "i18next-browser-languagedetector": "^6.0.1", + "i18next-http-backend": "^1.1.1", + "json5": "^2.2.0", + "lodash-es": "^4.17.21", + "lru-cache": "^6.0.0", + "markdown-to-jsx": "^7.1.2", + "rc-menu": "^8.10.6", + "react": "^17.0.1", + "react-chartjs-2": "^2.11.1", + "react-dom": "^17.0.1", + "react-file-drop": "^3.1.2", + "react-hotkeys": "^2.0.0", + "react-i18next": "^11.8.10", + "react-redux": "^7.2.2", + "react-router-dom": "^5.2.0", + "react-timeago": "^5.2.0", + "react-world-flags": "^1.4.0", + "redux": "^4.0.5", + "semver": "^7.3.4", + "shallowequal": "^1.1.0", + "spu-md5": "0.0.4", + "typesafe-actions": "^5.1.0", + "uuid": "^8.3.2", + "web-vitals": "^1.1.1", + "websocket-as-promised": "^2.0.1", + "workbox-core": "^6.1.1", + "workbox-precaching": "^6.1.1", + "workbox-routing": "^6.1.1", + "workbox-strategies": "^6.1.1" }, "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "eject": "react-scripts eject" + "start": "craco start", + "clean": "rimraf build", + "build": "craco build", + "optimise": "gzip -kr build/static", + "full-build": "npm run clean; NODE_ENV=production npm run build; npm run optimise", + "analyze-build": "FORCE_ANALYZE=true npm run build", + "test": "craco test" }, "eslintConfig": { "extends": "react-app" @@ -35,5 +83,55 @@ "last 1 firefox version", "last 1 safari version" ] + }, + "devDependencies": { + "@craco/craco": "^6.1.1", + "@lemmmy/craco-less": "1.18.0", + "@simbathesailor/babel-plugin-use-what-changed": "^2.0.3", + "@simbathesailor/use-what-changed": "^1.0.0", + "@types/classnames": "^2.2.11", + "@types/debug": "^4.1.5", + "@types/file-saver": "^2.0.1", + "@types/jest": "^26.0.20", + "@types/lodash-es": "^4.17.4", + "@types/lru-cache": "^5.1.0", + "@types/node": "^14.14.34", + "@types/react": "^17.0.3", + "@types/react-dom": "^17.0.2", + "@types/react-redux": "^7.1.16", + "@types/react-router-dom": "^5.1.7", + "@types/react-timeago": "^4.1.2", + "@types/semver": "^7.3.4", + "@types/shallowequal": "^1.1.1", + "@types/uuid": "^8.3.0", + "@types/webpack-env": "^1.16.0", + "@typescript-eslint/eslint-plugin": "4.15.3-alpha.17", + "@typescript-eslint/parser": "4.15.3-alpha.17", + "antd-dayjs-webpack-plugin": "^1.0.6", + "babel-plugin-lodash": "^3.3.4", + "craco-alias": "^2.2.0", + "eslint": "^7.22.0", + "eslint-plugin-react": "^7.22.0", + "eslint-plugin-react-hooks": "^4.2.0", + "eslint-plugin-tsdoc": "^0.2.11", + "git-revision-webpack-plugin": "^3.0.6", + "gitlog": "^4.0.4", + "less": "4.1.1", + "less-loader": "7.3.0", + "react-refresh": "^0.9.0", + "react-scripts": "^4.0.3", + "redux-devtools-extension": "^2.13.9", + "rimraf": "^3.0.2", + "ts-loader": "^8.0.18", + "typescript": "4.1.5", + "utility-types": "^3.10.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpackbar": "^5.0.0-3", + "workerize-loader": "^1.3.0" + }, + "jest": { + "transformIgnorePatterns": [ + "/node_modules/(?!antd|@ant-design|rc-.+?|@babel/runtime).+(js|jsx)$" + ] } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..1e9e663 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,14124 @@ +dependencies: + '@ant-design/icons': 4.5.0_react-dom@17.0.1+react@17.0.1 + '@testing-library/jest-dom': 5.11.9 + '@testing-library/react': 11.2.5_react-dom@17.0.1+react@17.0.1 + '@testing-library/user-event': 12.8.3 + antd: 4.14.0_89622fd8e4ec221151a62783d49305af + async-mutex: 0.3.1 + await-to-js: 2.1.1 + base64-arraybuffer: 0.2.0 + chart.js: 2.9.4 + classnames: 2.2.6 + csv-stringify: 5.6.2 + dayjs: 1.10.4 + debug: 4.3.1 + file-saver: 2.0.5 + i18next: 19.9.2 + i18next-browser-languagedetector: 6.0.1 + i18next-http-backend: 1.1.1 + json5: 2.2.0 + lodash-es: 4.17.21 + lru-cache: 6.0.0 + markdown-to-jsx: 7.1.2_react@17.0.1 + rc-menu: 8.10.6_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-chartjs-2: 2.11.1_6c446a34f83b2a92e3214f8b711c141a + react-dom: 17.0.1_react@17.0.1 + react-file-drop: 3.1.2_react-dom@17.0.1+react@17.0.1 + react-hotkeys: 2.0.0_react@17.0.1 + react-i18next: 11.8.10_i18next@19.9.2+react@17.0.1 + react-redux: 7.2.2_380dc38591053d98779d1f25fc7202b9 + react-router-dom: 5.2.0_react@17.0.1 + react-timeago: 5.2.0_react@17.0.1 + react-world-flags: 1.4.0_react@17.0.1 + redux: 4.0.5 + semver: 7.3.4 + shallowequal: 1.1.0 + spu-md5: 0.0.4 + typesafe-actions: 5.1.0 + uuid: 8.3.2 + web-vitals: 1.1.1 + websocket-as-promised: 2.0.1 + workbox-core: 6.1.1 + workbox-precaching: 6.1.1 + workbox-routing: 6.1.1 + workbox-strategies: 6.1.1 +devDependencies: + '@craco/craco': 6.1.1_react-scripts@4.0.3 + '@lemmmy/craco-less': 1.18.0_077094f002a207b28261f7f7ea13418e + '@simbathesailor/babel-plugin-use-what-changed': 2.0.3_2c571758f5994ba8e8659c08260bd813 + '@simbathesailor/use-what-changed': 1.0.0_react@17.0.1 + '@types/classnames': 2.2.11 + '@types/debug': 4.1.5 + '@types/file-saver': 2.0.1 + '@types/jest': 26.0.20 + '@types/lodash-es': 4.17.4 + '@types/lru-cache': 5.1.0 + '@types/node': 14.14.34 + '@types/react': 17.0.3 + '@types/react-dom': 17.0.2 + '@types/react-redux': 7.1.16 + '@types/react-router-dom': 5.1.7 + '@types/react-timeago': 4.1.2 + '@types/semver': 7.3.4 + '@types/shallowequal': 1.1.1 + '@types/uuid': 8.3.0 + '@types/webpack-env': 1.16.0 + '@typescript-eslint/eslint-plugin': 4.15.3-alpha.17_e20b0dcb4d72879efd3787e2a56fd748 + '@typescript-eslint/parser': 4.15.3-alpha.17_eslint@7.22.0+typescript@4.1.5 + antd-dayjs-webpack-plugin: 1.0.6_dayjs@1.10.4 + babel-plugin-lodash: 3.3.4 + craco-alias: 2.2.0 + eslint: 7.22.0 + eslint-plugin-react: 7.22.0_eslint@7.22.0 + eslint-plugin-react-hooks: 4.2.0_eslint@7.22.0 + eslint-plugin-tsdoc: 0.2.11 + git-revision-webpack-plugin: 3.0.6 + gitlog: 4.0.4 + less: 4.1.1 + less-loader: 7.3.0_less@4.1.1 + react-refresh: 0.9.0 + react-scripts: 4.0.3_react@17.0.1+typescript@4.1.5 + redux-devtools-extension: 2.13.9_redux@4.0.5 + rimraf: 3.0.2 + ts-loader: 8.0.18_typescript@4.1.5 + typescript: 4.1.5 + utility-types: 3.10.0 + webpack-bundle-analyzer: 4.4.0 + webpackbar: 5.0.0-3 + workerize-loader: 1.3.0 +lockfileVersion: 5.2 +packages: + /@ant-design/colors/6.0.0: + dependencies: + '@ctrl/tinycolor': 3.4.0 + dev: false + resolution: + integrity: sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ== + /@ant-design/icons-svg/4.1.0: + dev: false + resolution: + integrity: sha512-Fi03PfuUqRs76aI3UWYpP864lkrfPo0hluwGqh7NJdLhvH4iRDc3jbJqZIvRDLHKbXrvAfPPV3+zjUccfFvWOQ== + /@ant-design/icons/4.5.0_react-dom@17.0.1+react@17.0.1: + dependencies: + '@ant-design/colors': 6.0.0 + '@ant-design/icons-svg': 4.1.0 + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + insert-css: 2.0.0 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + dev: false + engines: + node: '>=8' + peerDependencies: + react: '>=16.0.0' + react-dom: '*' + resolution: + integrity: sha512-ZAKJcmr4DBV3NWr8wm2dCxNKN4eFrX+qCaPsuFejP6FRsf+m5OKxvCVi9bSp1lmKWeOI5yECAx5s0uFm4QHuPw== + /@ant-design/react-slick/0.28.2: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + json2mq: 0.2.0 + lodash: 4.17.21 + resize-observer-polyfill: 1.5.1 + dev: false + resolution: + integrity: sha512-nkrvXsO29pLToFaBb3MlJY4McaUFR4UHtXTz6A5HBzYmxH4SwKerX54mWdGc/6tKpHvS3vUwjEOt2T5XqZEo8Q== + /@babel/code-frame/7.10.4: + dependencies: + '@babel/highlight': 7.13.10 + dev: true + resolution: + integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + /@babel/code-frame/7.12.11: + dependencies: + '@babel/highlight': 7.13.10 + dev: true + resolution: + integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + /@babel/code-frame/7.12.13: + dependencies: + '@babel/highlight': 7.13.10 + resolution: + integrity: sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== + /@babel/compat-data/7.13.11: + dev: true + resolution: + integrity: sha512-BwKEkO+2a67DcFeS3RLl0Z3Gs2OvdXewuWjc1Hfokhb5eQWP9YRYH1/+VrVZvql2CfjOiNGqSAFOYt4lsqTHzg== + /@babel/core/7.12.3: + dependencies: + '@babel/code-frame': 7.12.13 + '@babel/generator': 7.13.9 + '@babel/helper-module-transforms': 7.13.0 + '@babel/helpers': 7.13.10 + '@babel/parser': 7.13.11 + '@babel/template': 7.12.13 + '@babel/traverse': 7.13.0 + '@babel/types': 7.13.0 + convert-source-map: 1.7.0 + debug: 4.3.1 + gensync: 1.0.0-beta.2 + json5: 2.2.0 + lodash: 4.17.21 + resolve: 1.18.1 + semver: 5.7.1 + source-map: 0.5.7 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g== + /@babel/generator/7.13.9: + dependencies: + '@babel/types': 7.13.0 + jsesc: 2.5.2 + source-map: 0.5.7 + dev: true + resolution: + integrity: sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== + /@babel/helper-annotate-as-pure/7.12.13: + dependencies: + '@babel/types': 7.13.0 + dev: true + resolution: + integrity: sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw== + /@babel/helper-builder-binary-assignment-operator-visitor/7.12.13: + dependencies: + '@babel/helper-explode-assignable-expression': 7.13.0 + '@babel/types': 7.13.0 + dev: true + resolution: + integrity: sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA== + /@babel/helper-compilation-targets/7.13.10_@babel+core@7.12.3: + dependencies: + '@babel/compat-data': 7.13.11 + '@babel/core': 7.12.3 + '@babel/helper-validator-option': 7.12.17 + browserslist: 4.16.3 + semver: 6.3.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0 + resolution: + integrity: sha512-/Xju7Qg1GQO4mHZ/Kcs6Au7gfafgZnwm+a7sy/ow/tV1sHeraRUHbjdat8/UvDor4Tez+siGKDk6zIKtCPKVJA== + /@babel/helper-create-class-features-plugin/7.13.11_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-function-name': 7.12.13 + '@babel/helper-member-expression-to-functions': 7.13.0 + '@babel/helper-optimise-call-expression': 7.12.13 + '@babel/helper-replace-supers': 7.13.0 + '@babel/helper-split-export-declaration': 7.12.13 + dev: true + peerDependencies: + '@babel/core': ^7.0.0 + resolution: + integrity: sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw== + /@babel/helper-create-regexp-features-plugin/7.12.17_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-annotate-as-pure': 7.12.13 + regexpu-core: 4.7.1 + dev: true + peerDependencies: + '@babel/core': ^7.0.0 + resolution: + integrity: sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg== + /@babel/helper-define-polyfill-provider/0.1.5_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-compilation-targets': 7.13.10_@babel+core@7.12.3 + '@babel/helper-module-imports': 7.12.13 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/traverse': 7.13.0 + debug: 4.3.1 + lodash.debounce: 4.0.8 + resolve: 1.18.1 + semver: 6.3.0 + dev: true + peerDependencies: + '@babel/core': ^7.4.0-0 + resolution: + integrity: sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg== + /@babel/helper-explode-assignable-expression/7.13.0: + dependencies: + '@babel/types': 7.13.0 + dev: true + resolution: + integrity: sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA== + /@babel/helper-function-name/7.12.13: + dependencies: + '@babel/helper-get-function-arity': 7.12.13 + '@babel/template': 7.12.13 + '@babel/types': 7.13.0 + dev: true + resolution: + integrity: sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== + /@babel/helper-get-function-arity/7.12.13: + dependencies: + '@babel/types': 7.13.0 + dev: true + resolution: + integrity: sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== + /@babel/helper-hoist-variables/7.13.0: + dependencies: + '@babel/traverse': 7.13.0 + '@babel/types': 7.13.0 + dev: true + resolution: + integrity: sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g== + /@babel/helper-member-expression-to-functions/7.13.0: + dependencies: + '@babel/types': 7.13.0 + dev: true + resolution: + integrity: sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ== + /@babel/helper-module-imports/7.12.13: + dependencies: + '@babel/types': 7.13.0 + dev: true + resolution: + integrity: sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g== + /@babel/helper-module-transforms/7.13.0: + dependencies: + '@babel/helper-module-imports': 7.12.13 + '@babel/helper-replace-supers': 7.13.0 + '@babel/helper-simple-access': 7.12.13 + '@babel/helper-split-export-declaration': 7.12.13 + '@babel/helper-validator-identifier': 7.12.11 + '@babel/template': 7.12.13 + '@babel/traverse': 7.13.0 + '@babel/types': 7.13.0 + lodash: 4.17.21 + dev: true + resolution: + integrity: sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw== + /@babel/helper-optimise-call-expression/7.12.13: + dependencies: + '@babel/types': 7.13.0 + dev: true + resolution: + integrity: sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== + /@babel/helper-plugin-utils/7.13.0: + dev: true + resolution: + integrity: sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== + /@babel/helper-remap-async-to-generator/7.13.0: + dependencies: + '@babel/helper-annotate-as-pure': 7.12.13 + '@babel/helper-wrap-function': 7.13.0 + '@babel/types': 7.13.0 + dev: true + resolution: + integrity: sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg== + /@babel/helper-replace-supers/7.13.0: + dependencies: + '@babel/helper-member-expression-to-functions': 7.13.0 + '@babel/helper-optimise-call-expression': 7.12.13 + '@babel/traverse': 7.13.0 + '@babel/types': 7.13.0 + dev: true + resolution: + integrity: sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw== + /@babel/helper-simple-access/7.12.13: + dependencies: + '@babel/types': 7.13.0 + dev: true + resolution: + integrity: sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA== + /@babel/helper-skip-transparent-expression-wrappers/7.12.1: + dependencies: + '@babel/types': 7.13.0 + dev: true + resolution: + integrity: sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== + /@babel/helper-split-export-declaration/7.12.13: + dependencies: + '@babel/types': 7.13.0 + dev: true + resolution: + integrity: sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== + /@babel/helper-validator-identifier/7.12.11: + resolution: + integrity: sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + /@babel/helper-validator-option/7.12.17: + dev: true + resolution: + integrity: sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== + /@babel/helper-wrap-function/7.13.0: + dependencies: + '@babel/helper-function-name': 7.12.13 + '@babel/template': 7.12.13 + '@babel/traverse': 7.13.0 + '@babel/types': 7.13.0 + dev: true + resolution: + integrity: sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== + /@babel/helpers/7.13.10: + dependencies: + '@babel/template': 7.12.13 + '@babel/traverse': 7.13.0 + '@babel/types': 7.13.0 + dev: true + resolution: + integrity: sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ== + /@babel/highlight/7.13.10: + dependencies: + '@babel/helper-validator-identifier': 7.12.11 + chalk: 2.4.2 + js-tokens: 4.0.0 + resolution: + integrity: sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== + /@babel/parser/7.13.11: + dev: true + engines: + node: '>=6.0.0' + hasBin: true + resolution: + integrity: sha512-PhuoqeHoO9fc4ffMEVk4qb/w/s2iOSWohvbHxLtxui0eBg3Lg5gN1U8wp1V1u61hOWkPQJJyJzGH6Y+grwkq8Q== + /@babel/plugin-proposal-async-generator-functions/7.13.8_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-remap-async-to-generator': 7.13.0 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA== + /@babel/plugin-proposal-class-properties/7.12.1_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-create-class-features-plugin': 7.13.11_@babel+core@7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== + /@babel/plugin-proposal-class-properties/7.13.0_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-create-class-features-plugin': 7.13.11_@babel+core@7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== + /@babel/plugin-proposal-decorators/7.12.1_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-create-class-features-plugin': 7.13.11_@babel+core@7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-decorators': 7.12.13_@babel+core@7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-knNIuusychgYN8fGJHONL0RbFxLGawhXOJNLBk75TniTsZZeA+wdkDuv6wp4lGwzQEKjZi6/WYtnb3udNPmQmQ== + /@babel/plugin-proposal-dynamic-import/7.13.8_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ== + /@babel/plugin-proposal-export-namespace-from/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw== + /@babel/plugin-proposal-json-strings/7.13.8_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q== + /@babel/plugin-proposal-logical-assignment-operators/7.13.8_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A== + /@babel/plugin-proposal-nullish-coalescing-operator/7.12.1_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== + /@babel/plugin-proposal-nullish-coalescing-operator/7.13.8_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A== + /@babel/plugin-proposal-numeric-separator/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w== + /@babel/plugin-proposal-numeric-separator/7.12.1_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA== + /@babel/plugin-proposal-object-rest-spread/7.13.8_@babel+core@7.12.3: + dependencies: + '@babel/compat-data': 7.13.11 + '@babel/core': 7.12.3 + '@babel/helper-compilation-targets': 7.13.10_@babel+core@7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.12.3 + '@babel/plugin-transform-parameters': 7.13.0_@babel+core@7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g== + /@babel/plugin-proposal-optional-catch-binding/7.13.8_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA== + /@babel/plugin-proposal-optional-chaining/7.12.1_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.12.1 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw== + /@babel/plugin-proposal-optional-chaining/7.13.8_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.12.1 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-hpbBwbTgd7Cz1QryvwJZRo1U0k1q8uyBmeXOSQUjdg/A2TASkhR/rz7AyqZ/kS8kbpsNA80rOYbxySBJAqmhhQ== + /@babel/plugin-proposal-private-methods/7.13.0_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-create-class-features-plugin': 7.13.11_@babel+core@7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q== + /@babel/plugin-proposal-unicode-property-regex/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-create-regexp-features-plugin': 7.12.17_@babel+core@7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + engines: + node: '>=4' + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg== + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + /@babel/plugin-syntax-decorators/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-Rw6aIXGuqDLr6/LoBBYE57nKOzQpz/aDkKlMqEwH+Vp0MXbG6H/TfRjaY343LKxzAKAMXIHsQ8JzaZKuDZ9MwA== + /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + /@babel/plugin-syntax-flow/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-J/RYxnlSLXZLVR7wTRsozxKT8qbsx1mNKJzXEEjQ0Kjx1ZACcyHgbanNWNCFtc36IzuWhYWPpvJFFoexoOWFmA== + /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + /@babel/plugin-syntax-jsx/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g== + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + /@babel/plugin-syntax-top-level-await/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== + /@babel/plugin-syntax-typescript/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w== + /@babel/plugin-transform-arrow-functions/7.13.0_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== + /@babel/plugin-transform-async-to-generator/7.13.0_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-module-imports': 7.12.13 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-remap-async-to-generator': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg== + /@babel/plugin-transform-block-scoped-functions/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== + /@babel/plugin-transform-block-scoping/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ== + /@babel/plugin-transform-classes/7.13.0_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-annotate-as-pure': 7.12.13 + '@babel/helper-function-name': 7.12.13 + '@babel/helper-optimise-call-expression': 7.12.13 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-replace-supers': 7.13.0 + '@babel/helper-split-export-declaration': 7.12.13 + globals: 11.12.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g== + /@babel/plugin-transform-computed-properties/7.13.0_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== + /@babel/plugin-transform-destructuring/7.13.0_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA== + /@babel/plugin-transform-dotall-regex/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-create-regexp-features-plugin': 7.12.17_@babel+core@7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ== + /@babel/plugin-transform-duplicate-keys/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ== + /@babel/plugin-transform-exponentiation-operator/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.12.13 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA== + /@babel/plugin-transform-flow-strip-types/7.12.1_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-flow': 7.12.13_@babel+core@7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-8hAtkmsQb36yMmEtk2JZ9JnVyDSnDOdlB+0nEGzIDLuK4yR3JcEjfuFPYkdEPSh8Id+rAMeBEn+X0iVEyho6Hg== + /@babel/plugin-transform-for-of/7.13.0_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== + /@babel/plugin-transform-function-name/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-function-name': 7.12.13 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== + /@babel/plugin-transform-literals/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== + /@babel/plugin-transform-member-expression-literals/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== + /@babel/plugin-transform-modules-amd/7.13.0_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-module-transforms': 7.13.0 + '@babel/helper-plugin-utils': 7.13.0 + babel-plugin-dynamic-import-node: 2.3.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ== + /@babel/plugin-transform-modules-commonjs/7.13.8_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-module-transforms': 7.13.0 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-simple-access': 7.12.13 + babel-plugin-dynamic-import-node: 2.3.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw== + /@babel/plugin-transform-modules-systemjs/7.13.8_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-hoist-variables': 7.13.0 + '@babel/helper-module-transforms': 7.13.0 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-validator-identifier': 7.12.11 + babel-plugin-dynamic-import-node: 2.3.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A== + /@babel/plugin-transform-modules-umd/7.13.0_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-module-transforms': 7.13.0 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw== + /@babel/plugin-transform-named-capturing-groups-regex/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-create-regexp-features-plugin': 7.12.17_@babel+core@7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0 + resolution: + integrity: sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA== + /@babel/plugin-transform-new-target/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ== + /@babel/plugin-transform-object-super/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-replace-supers': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== + /@babel/plugin-transform-parameters/7.13.0_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw== + /@babel/plugin-transform-property-literals/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== + /@babel/plugin-transform-react-constant-elements/7.13.10_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-E+aCW9j7mLq01tOuGV08YzLBt+vSyr4bOPT75B6WrAlrUfmOYOZ/yWk847EH0dv0xXiCihWLEmlX//O30YhpIw== + /@babel/plugin-transform-react-display-name/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA== + /@babel/plugin-transform-react-display-name/7.12.1_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w== + /@babel/plugin-transform-react-jsx-development/7.12.17_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/plugin-transform-react-jsx': 7.12.17_@babel+core@7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ== + /@babel/plugin-transform-react-jsx-self/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-FXYw98TTJ125GVCCkFLZXlZ1qGcsYqNQhVBQcZjyrwf8FEUtVfKIoidnO8S0q+KBQpDYNTmiGo1gn67Vti04lQ== + /@babel/plugin-transform-react-jsx-source/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-O5JJi6fyfih0WfDgIJXksSPhGP/G0fQpfxYy87sDc+1sFmsCS6wr3aAn+whbzkhbjtq4VMqLRaSzR6IsshIC0Q== + /@babel/plugin-transform-react-jsx/7.12.17_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-annotate-as-pure': 7.12.13 + '@babel/helper-module-imports': 7.12.13 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-jsx': 7.12.13_@babel+core@7.12.3 + '@babel/types': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-mwaVNcXV+l6qJOuRhpdTEj8sT/Z0owAVWf9QujTZ0d2ye9X/K+MTOTSizcgKOj18PGnTc/7g1I4+cIUjsKhBcw== + /@babel/plugin-transform-react-pure-annotations/7.12.1_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-annotate-as-pure': 7.12.13 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg== + /@babel/plugin-transform-regenerator/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + regenerator-transform: 0.14.5 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA== + /@babel/plugin-transform-reserved-words/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg== + /@babel/plugin-transform-runtime/7.12.1_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-module-imports': 7.12.13 + '@babel/helper-plugin-utils': 7.13.0 + resolve: 1.18.1 + semver: 5.7.1 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg== + /@babel/plugin-transform-shorthand-properties/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== + /@babel/plugin-transform-spread/7.13.0_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.12.1 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== + /@babel/plugin-transform-sticky-regex/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg== + /@babel/plugin-transform-template-literals/7.13.0_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== + /@babel/plugin-transform-typeof-symbol/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ== + /@babel/plugin-transform-typescript/7.13.0_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-create-class-features-plugin': 7.13.11_@babel+core@7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-syntax-typescript': 7.12.13_@babel+core@7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ== + /@babel/plugin-transform-unicode-escapes/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw== + /@babel/plugin-transform-unicode-regex/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-create-regexp-features-plugin': 7.12.17_@babel+core@7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA== + /@babel/preset-env/7.12.1_@babel+core@7.12.3: + dependencies: + '@babel/compat-data': 7.13.11 + '@babel/core': 7.12.3 + '@babel/helper-compilation-targets': 7.13.10_@babel+core@7.12.3 + '@babel/helper-module-imports': 7.12.13 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-validator-option': 7.12.17 + '@babel/plugin-proposal-async-generator-functions': 7.13.8_@babel+core@7.12.3 + '@babel/plugin-proposal-class-properties': 7.12.1_@babel+core@7.12.3 + '@babel/plugin-proposal-dynamic-import': 7.13.8_@babel+core@7.12.3 + '@babel/plugin-proposal-export-namespace-from': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-proposal-json-strings': 7.13.8_@babel+core@7.12.3 + '@babel/plugin-proposal-logical-assignment-operators': 7.13.8_@babel+core@7.12.3 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.12.1_@babel+core@7.12.3 + '@babel/plugin-proposal-numeric-separator': 7.12.1_@babel+core@7.12.3 + '@babel/plugin-proposal-object-rest-spread': 7.13.8_@babel+core@7.12.3 + '@babel/plugin-proposal-optional-catch-binding': 7.13.8_@babel+core@7.12.3 + '@babel/plugin-proposal-optional-chaining': 7.12.1_@babel+core@7.12.3 + '@babel/plugin-proposal-private-methods': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-proposal-unicode-property-regex': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.12.3 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.12.3 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.12.3 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.12.3 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.12.3 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.12.3 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.12.3 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.12.3 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.12.3 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.12.3 + '@babel/plugin-syntax-top-level-await': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-arrow-functions': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-transform-async-to-generator': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-transform-block-scoped-functions': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-block-scoping': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-classes': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-transform-computed-properties': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-transform-destructuring': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-transform-dotall-regex': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-duplicate-keys': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-exponentiation-operator': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-for-of': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-transform-function-name': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-literals': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-member-expression-literals': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-modules-amd': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-transform-modules-commonjs': 7.13.8_@babel+core@7.12.3 + '@babel/plugin-transform-modules-systemjs': 7.13.8_@babel+core@7.12.3 + '@babel/plugin-transform-modules-umd': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-transform-named-capturing-groups-regex': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-new-target': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-object-super': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-parameters': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-transform-property-literals': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-regenerator': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-reserved-words': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-shorthand-properties': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-spread': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-transform-sticky-regex': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-template-literals': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-transform-typeof-symbol': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-unicode-escapes': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-unicode-regex': 7.12.13_@babel+core@7.12.3 + '@babel/preset-modules': 0.1.4_@babel+core@7.12.3 + '@babel/types': 7.13.0 + core-js-compat: 3.9.1 + semver: 5.7.1 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg== + /@babel/preset-env/7.13.10_@babel+core@7.12.3: + dependencies: + '@babel/compat-data': 7.13.11 + '@babel/core': 7.12.3 + '@babel/helper-compilation-targets': 7.13.10_@babel+core@7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-validator-option': 7.12.17 + '@babel/plugin-proposal-async-generator-functions': 7.13.8_@babel+core@7.12.3 + '@babel/plugin-proposal-class-properties': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-proposal-dynamic-import': 7.13.8_@babel+core@7.12.3 + '@babel/plugin-proposal-export-namespace-from': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-proposal-json-strings': 7.13.8_@babel+core@7.12.3 + '@babel/plugin-proposal-logical-assignment-operators': 7.13.8_@babel+core@7.12.3 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.13.8_@babel+core@7.12.3 + '@babel/plugin-proposal-numeric-separator': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-proposal-object-rest-spread': 7.13.8_@babel+core@7.12.3 + '@babel/plugin-proposal-optional-catch-binding': 7.13.8_@babel+core@7.12.3 + '@babel/plugin-proposal-optional-chaining': 7.13.8_@babel+core@7.12.3 + '@babel/plugin-proposal-private-methods': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-proposal-unicode-property-regex': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.12.3 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.12.3 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.12.3 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.12.3 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.12.3 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.12.3 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.12.3 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.12.3 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.12.3 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.12.3 + '@babel/plugin-syntax-top-level-await': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-arrow-functions': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-transform-async-to-generator': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-transform-block-scoped-functions': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-block-scoping': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-classes': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-transform-computed-properties': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-transform-destructuring': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-transform-dotall-regex': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-duplicate-keys': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-exponentiation-operator': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-for-of': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-transform-function-name': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-literals': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-member-expression-literals': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-modules-amd': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-transform-modules-commonjs': 7.13.8_@babel+core@7.12.3 + '@babel/plugin-transform-modules-systemjs': 7.13.8_@babel+core@7.12.3 + '@babel/plugin-transform-modules-umd': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-transform-named-capturing-groups-regex': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-new-target': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-object-super': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-parameters': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-transform-property-literals': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-regenerator': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-reserved-words': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-shorthand-properties': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-spread': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-transform-sticky-regex': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-template-literals': 7.13.0_@babel+core@7.12.3 + '@babel/plugin-transform-typeof-symbol': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-unicode-escapes': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-unicode-regex': 7.12.13_@babel+core@7.12.3 + '@babel/preset-modules': 0.1.4_@babel+core@7.12.3 + '@babel/types': 7.13.0 + babel-plugin-polyfill-corejs2: 0.1.10_@babel+core@7.12.3 + babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.12.3 + babel-plugin-polyfill-regenerator: 0.1.6_@babel+core@7.12.3 + core-js-compat: 3.9.1 + semver: 6.3.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-nOsTScuoRghRtUsRr/c69d042ysfPHcu+KOB4A9aAO9eJYqrkat+LF8G1yp1HD18QiwixT2CisZTr/0b3YZPXQ== + /@babel/preset-modules/0.1.4_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-proposal-unicode-property-regex': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-dotall-regex': 7.12.13_@babel+core@7.12.3 + '@babel/types': 7.13.0 + esutils: 2.0.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + /@babel/preset-react/7.12.13_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-transform-react-display-name': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-react-jsx': 7.12.17_@babel+core@7.12.3 + '@babel/plugin-transform-react-jsx-development': 7.12.17_@babel+core@7.12.3 + '@babel/plugin-transform-react-pure-annotations': 7.12.1_@babel+core@7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-TYM0V9z6Abb6dj1K7i5NrEhA13oS5ujUYQYDfqIBXYHOc2c2VkFgc+q9kyssIyUfy4/hEwqrgSlJ/Qgv8zJLsA== + /@babel/preset-react/7.12.1_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-transform-react-display-name': 7.12.1_@babel+core@7.12.3 + '@babel/plugin-transform-react-jsx': 7.12.17_@babel+core@7.12.3 + '@babel/plugin-transform-react-jsx-development': 7.12.17_@babel+core@7.12.3 + '@babel/plugin-transform-react-jsx-self': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-react-jsx-source': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-transform-react-pure-annotations': 7.12.1_@babel+core@7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g== + /@babel/preset-typescript/7.12.1_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-plugin-utils': 7.13.0 + '@babel/plugin-transform-typescript': 7.13.0_@babel+core@7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw== + /@babel/runtime-corejs3/7.13.10: + dependencies: + core-js-pure: 3.9.1 + regenerator-runtime: 0.13.7 + resolution: + integrity: sha512-x/XYVQ1h684pp1mJwOV4CyvqZXqbc8CMsMGUnAbuc82ZCdv1U63w5RSUzgDSXQHG5Rps/kiksH6g2D5BuaKyXg== + /@babel/runtime/7.12.1: + dependencies: + regenerator-runtime: 0.13.7 + dev: true + resolution: + integrity: sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA== + /@babel/runtime/7.13.10: + dependencies: + regenerator-runtime: 0.13.7 + resolution: + integrity: sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw== + /@babel/template/7.12.13: + dependencies: + '@babel/code-frame': 7.12.13 + '@babel/parser': 7.13.11 + '@babel/types': 7.13.0 + dev: true + resolution: + integrity: sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== + /@babel/traverse/7.13.0: + dependencies: + '@babel/code-frame': 7.12.13 + '@babel/generator': 7.13.9 + '@babel/helper-function-name': 7.12.13 + '@babel/helper-split-export-declaration': 7.12.13 + '@babel/parser': 7.13.11 + '@babel/types': 7.13.0 + debug: 4.3.1 + globals: 11.12.0 + lodash: 4.17.21 + dev: true + resolution: + integrity: sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ== + /@babel/types/7.13.0: + dependencies: + '@babel/helper-validator-identifier': 7.12.11 + lodash: 4.17.21 + to-fast-properties: 2.0.0 + dev: true + resolution: + integrity: sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA== + /@bcoe/v8-coverage/0.2.3: + dev: true + resolution: + integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + /@cnakazawa/watch/1.0.4: + dependencies: + exec-sh: 0.3.4 + minimist: 1.2.5 + dev: true + engines: + node: '>=0.1.95' + hasBin: true + resolution: + integrity: sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== + /@craco/craco/6.1.1_react-scripts@4.0.3: + dependencies: + cross-spawn: 7.0.3 + lodash: 4.17.21 + react-scripts: 4.0.3_react@17.0.1+typescript@4.1.5 + semver: 7.3.4 + webpack-merge: 4.2.2 + dev: true + engines: + node: '>=6' + hasBin: true + peerDependencies: + react-scripts: ^4.0.0 + resolution: + integrity: sha512-4irfOM8RgYNhFJzAXyIuM8CZLju2Jh9GdOem8uqM2/cI2xPulQSxZKU/9q3uiSbFUJfQLi3pomVKii6KzWLu3Q== + /@csstools/convert-colors/1.4.0: + dev: true + engines: + node: '>=4.0.0' + resolution: + integrity: sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== + /@csstools/normalize.css/10.1.0: + dev: true + resolution: + integrity: sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg== + /@ctrl/tinycolor/3.4.0: + dev: false + engines: + node: '>=10' + resolution: + integrity: sha512-JZButFdZ1+/xAfpguQHoabIXkcqRRKpMrWKBkpEZZyxfY9C1DpADFB8PEqGSTeFr135SaTRfKqGKx5xSCLI7ZQ== + /@eslint/eslintrc/0.4.0: + dependencies: + ajv: 6.12.6 + debug: 4.3.1 + espree: 7.3.1 + globals: 12.4.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + js-yaml: 3.14.1 + minimatch: 3.0.4 + strip-json-comments: 3.1.1 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + resolution: + integrity: sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog== + /@hapi/address/2.1.4: + deprecated: Moved to 'npm install @sideway/address' + dev: true + resolution: + integrity: sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== + /@hapi/bourne/1.3.2: + deprecated: This version has been deprecated and is no longer supported or maintained + dev: true + resolution: + integrity: sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== + /@hapi/hoek/8.5.1: + deprecated: This version has been deprecated and is no longer supported or maintained + dev: true + resolution: + integrity: sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== + /@hapi/joi/15.1.1: + dependencies: + '@hapi/address': 2.1.4 + '@hapi/bourne': 1.3.2 + '@hapi/hoek': 8.5.1 + '@hapi/topo': 3.1.6 + deprecated: Switch to 'npm install joi' + dev: true + resolution: + integrity: sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== + /@hapi/topo/3.1.6: + dependencies: + '@hapi/hoek': 8.5.1 + deprecated: This version has been deprecated and is no longer supported or maintained + dev: true + resolution: + integrity: sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== + /@istanbuljs/load-nyc-config/1.1.0: + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + /@istanbuljs/schema/0.1.3: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + /@jest/console/26.6.2: + dependencies: + '@jest/types': 26.6.2 + '@types/node': 14.14.34 + chalk: 4.1.0 + jest-message-util: 26.6.2 + jest-util: 26.6.2 + slash: 3.0.0 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== + /@jest/core/26.6.3: + dependencies: + '@jest/console': 26.6.2 + '@jest/reporters': 26.6.2 + '@jest/test-result': 26.6.2 + '@jest/transform': 26.6.2 + '@jest/types': 26.6.2 + '@types/node': 14.14.34 + ansi-escapes: 4.3.1 + chalk: 4.1.0 + exit: 0.1.2 + graceful-fs: 4.2.6 + jest-changed-files: 26.6.2 + jest-config: 26.6.3 + jest-haste-map: 26.6.2 + jest-message-util: 26.6.2 + jest-regex-util: 26.0.0 + jest-resolve: 26.6.2 + jest-resolve-dependencies: 26.6.3 + jest-runner: 26.6.3 + jest-runtime: 26.6.3 + jest-snapshot: 26.6.2 + jest-util: 26.6.2 + jest-validate: 26.6.2 + jest-watcher: 26.6.2 + micromatch: 4.0.2 + p-each-series: 2.2.0 + rimraf: 3.0.2 + slash: 3.0.0 + strip-ansi: 6.0.0 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== + /@jest/environment/26.6.2: + dependencies: + '@jest/fake-timers': 26.6.2 + '@jest/types': 26.6.2 + '@types/node': 14.14.34 + jest-mock: 26.6.2 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== + /@jest/fake-timers/26.6.2: + dependencies: + '@jest/types': 26.6.2 + '@sinonjs/fake-timers': 6.0.1 + '@types/node': 14.14.34 + jest-message-util: 26.6.2 + jest-mock: 26.6.2 + jest-util: 26.6.2 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== + /@jest/globals/26.6.2: + dependencies: + '@jest/environment': 26.6.2 + '@jest/types': 26.6.2 + expect: 26.6.2 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== + /@jest/reporters/26.6.2: + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 26.6.2 + '@jest/test-result': 26.6.2 + '@jest/transform': 26.6.2 + '@jest/types': 26.6.2 + chalk: 4.1.0 + collect-v8-coverage: 1.0.1 + exit: 0.1.2 + glob: 7.1.6 + graceful-fs: 4.2.6 + istanbul-lib-coverage: 3.0.0 + istanbul-lib-instrument: 4.0.3 + istanbul-lib-report: 3.0.0 + istanbul-lib-source-maps: 4.0.0 + istanbul-reports: 3.0.2 + jest-haste-map: 26.6.2 + jest-resolve: 26.6.2 + jest-util: 26.6.2 + jest-worker: 26.6.2 + slash: 3.0.0 + source-map: 0.6.1 + string-length: 4.0.1 + terminal-link: 2.1.1 + v8-to-istanbul: 7.1.0 + dev: true + engines: + node: '>= 10.14.2' + optionalDependencies: + node-notifier: 8.0.2 + resolution: + integrity: sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== + /@jest/source-map/26.6.2: + dependencies: + callsites: 3.1.0 + graceful-fs: 4.2.6 + source-map: 0.6.1 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== + /@jest/test-result/26.6.2: + dependencies: + '@jest/console': 26.6.2 + '@jest/types': 26.6.2 + '@types/istanbul-lib-coverage': 2.0.3 + collect-v8-coverage: 1.0.1 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== + /@jest/test-sequencer/26.6.3: + dependencies: + '@jest/test-result': 26.6.2 + graceful-fs: 4.2.6 + jest-haste-map: 26.6.2 + jest-runner: 26.6.3 + jest-runtime: 26.6.3 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== + /@jest/transform/26.6.2: + dependencies: + '@babel/core': 7.12.3 + '@jest/types': 26.6.2 + babel-plugin-istanbul: 6.0.0 + chalk: 4.1.0 + convert-source-map: 1.7.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.6 + jest-haste-map: 26.6.2 + jest-regex-util: 26.0.0 + jest-util: 26.6.2 + micromatch: 4.0.2 + pirates: 4.0.1 + slash: 3.0.0 + source-map: 0.6.1 + write-file-atomic: 3.0.3 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== + /@jest/types/26.6.2: + dependencies: + '@types/istanbul-lib-coverage': 2.0.3 + '@types/istanbul-reports': 3.0.0 + '@types/node': 14.14.34 + '@types/yargs': 15.0.13 + chalk: 4.1.0 + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== + /@lemmmy/craco-less/1.18.0_077094f002a207b28261f7f7ea13418e: + dependencies: + '@craco/craco': 6.1.1_react-scripts@4.0.3 + less: 4.1.1 + less-loader: 7.3.0_less@4.1.1 + react-scripts: 4.0.3_react@17.0.1+typescript@4.1.5 + dev: true + peerDependencies: + '@craco/craco': ^5.5.0 + react-scripts: ^3.3.0 || ^4.0.0 + resolution: + integrity: sha512-ZHc+NXqvul3J55YcnTPWs7NbZoHHhW7BKc+4krUE9VG96RyvWu7UgRdJODFGi9QulrdQRlsjavPYnvyZ0wan/A== + /@microsoft/tsdoc-config/0.14.0: + dependencies: + '@microsoft/tsdoc': 0.13.0 + ajv: 6.12.6 + jju: 1.4.0 + resolve: 1.19.0 + dev: true + resolution: + integrity: sha512-KSj15FwyaxMCGJkC320rvNXxuJNCOVO02pNqIEdf5cbLakvHK8afoHTmcjdBEWl0cfBFZlMu/1DhL4VCzZq0rQ== + /@microsoft/tsdoc/0.13.0: + dev: true + resolution: + integrity: sha512-/8J+4DdvexBH1Qh1yR8VZ6bPay2DL/TDdmSIypAa3dAghJzsdaiZG8COvzpYIML6HV2UVN0g4qbuqzjG4YKgWg== + /@nodelib/fs.scandir/2.1.4: + dependencies: + '@nodelib/fs.stat': 2.0.4 + run-parallel: 1.2.0 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== + /@nodelib/fs.stat/2.0.4: + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== + /@nodelib/fs.walk/1.2.6: + dependencies: + '@nodelib/fs.scandir': 2.1.4 + fastq: 1.11.0 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== + /@npmcli/move-file/1.1.2: + dependencies: + mkdirp: 1.0.4 + rimraf: 3.0.2 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + /@pmmmwh/react-refresh-webpack-plugin/0.4.3_9f0995138d24e525eb86c097d82409c0: + dependencies: + ansi-html: 0.0.7 + error-stack-parser: 2.0.6 + html-entities: 1.4.0 + native-url: 0.2.6 + react-refresh: 0.8.3 + schema-utils: 2.7.1 + source-map: 0.7.3 + webpack: 4.44.2 + webpack-dev-server: 3.11.1_webpack@4.44.2 + dev: true + engines: + node: '>= 10.x' + peerDependencies: + '@types/webpack': 4.x + react-refresh: '>=0.8.3 <0.10.0' + sockjs-client: ^1.4.0 + type-fest: ^0.13.1 + webpack: '>=4.43.0 <6.0.0' + webpack-dev-server: 3.x + webpack-hot-middleware: 2.x + webpack-plugin-serve: 0.x || 1.x + peerDependenciesMeta: + '@types/webpack': + optional: true + sockjs-client: + optional: true + type-fest: + optional: true + webpack-dev-server: + optional: true + webpack-hot-middleware: + optional: true + webpack-plugin-serve: + optional: true + resolution: + integrity: sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ== + /@polka/url/1.0.0-next.11: + dev: true + resolution: + integrity: sha512-3NsZsJIA/22P3QUyrEDNA2D133H4j224twJrdipXN38dpnIOzAbUDtOwkcJ5pXmn75w7LSQDjA4tO9dm1XlqlA== + /@rollup/plugin-node-resolve/7.1.3_rollup@1.32.1: + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@1.32.1 + '@types/resolve': 0.0.8 + builtin-modules: 3.2.0 + is-module: 1.0.0 + resolve: 1.18.1 + rollup: 1.32.1 + dev: true + engines: + node: '>= 8.0.0' + peerDependencies: + rollup: ^1.20.0||^2.0.0 + resolution: + integrity: sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q== + /@rollup/plugin-replace/2.4.1_rollup@1.32.1: + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@1.32.1 + magic-string: 0.25.7 + rollup: 1.32.1 + dev: true + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + resolution: + integrity: sha512-XwC1oK5rrtRJ0tn1ioLHS6OV5JTluJF7QE1J/q1hN3bquwjnVxjtMyY9iCnoyH9DQbf92CxajB3o98wZbP3oAQ== + /@rollup/pluginutils/3.1.0_rollup@1.32.1: + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.2.2 + rollup: 1.32.1 + dev: true + engines: + node: '>= 8.0.0' + peerDependencies: + rollup: ^1.20.0||^2.0.0 + resolution: + integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + /@simbathesailor/babel-plugin-use-what-changed/2.0.3_2c571758f5994ba8e8659c08260bd813: + dependencies: + '@babel/generator': 7.13.9 + '@babel/types': 7.13.0 + '@simbathesailor/use-what-changed': 1.0.0_react@17.0.1 + '@types/babel-template': 6.25.2 + babel-template: 6.26.0 + babel-traverse: 6.26.0 + babel-types: 6.26.0 + babylon: 6.18.0 + react: 17.0.1 + dev: true + peerDependencies: + '@simbathesailor/use-what-changed': 1.x + react: '>=16' + resolution: + integrity: sha512-iS7CBpjolCbJA8G7G+CJzRpwY1TdRu/3nTfQVvAOb5N7hzlYuv+Sc51oyP/6jdtAKgG98o2Y/f6ZGwyUokITXw== + /@simbathesailor/use-what-changed/1.0.0_react@17.0.1: + dependencies: + react: 17.0.1 + dev: true + peerDependencies: + react: '>=16' + resolution: + integrity: sha512-L4UWzrkIImGNHMzPxYQ26xDHnqRsfaCT1zU6PumR8X55vJiZVEXyS3QGNl9q4Uolv16uT6qu6g7E820dNn58xw== + /@sinonjs/commons/1.8.2: + dependencies: + type-detect: 4.0.8 + dev: true + resolution: + integrity: sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw== + /@sinonjs/fake-timers/6.0.1: + dependencies: + '@sinonjs/commons': 1.8.2 + dev: true + resolution: + integrity: sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== + /@surma/rollup-plugin-off-main-thread/1.4.2: + dependencies: + ejs: 2.7.4 + magic-string: 0.25.7 + dev: true + resolution: + integrity: sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A== + /@svgr/babel-plugin-add-jsx-attribute/5.4.0: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== + /@svgr/babel-plugin-remove-jsx-attribute/5.4.0: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== + /@svgr/babel-plugin-remove-jsx-empty-expression/5.0.1: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== + /@svgr/babel-plugin-replace-jsx-attribute-value/5.0.1: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== + /@svgr/babel-plugin-svg-dynamic-title/5.4.0: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== + /@svgr/babel-plugin-svg-em-dimensions/5.4.0: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== + /@svgr/babel-plugin-transform-react-native-svg/5.4.0: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== + /@svgr/babel-plugin-transform-svg-component/5.5.0: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== + /@svgr/babel-preset/5.5.0: + dependencies: + '@svgr/babel-plugin-add-jsx-attribute': 5.4.0 + '@svgr/babel-plugin-remove-jsx-attribute': 5.4.0 + '@svgr/babel-plugin-remove-jsx-empty-expression': 5.0.1 + '@svgr/babel-plugin-replace-jsx-attribute-value': 5.0.1 + '@svgr/babel-plugin-svg-dynamic-title': 5.4.0 + '@svgr/babel-plugin-svg-em-dimensions': 5.4.0 + '@svgr/babel-plugin-transform-react-native-svg': 5.4.0 + '@svgr/babel-plugin-transform-svg-component': 5.5.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== + /@svgr/core/5.5.0: + dependencies: + '@svgr/plugin-jsx': 5.5.0 + camelcase: 6.2.0 + cosmiconfig: 7.0.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== + /@svgr/hast-util-to-babel-ast/5.5.0: + dependencies: + '@babel/types': 7.13.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== + /@svgr/plugin-jsx/5.5.0: + dependencies: + '@babel/core': 7.12.3 + '@svgr/babel-preset': 5.5.0 + '@svgr/hast-util-to-babel-ast': 5.5.0 + svg-parser: 2.0.4 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== + /@svgr/plugin-svgo/5.5.0: + dependencies: + cosmiconfig: 7.0.0 + deepmerge: 4.2.2 + svgo: 1.3.2 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== + /@svgr/webpack/5.5.0: + dependencies: + '@babel/core': 7.12.3 + '@babel/plugin-transform-react-constant-elements': 7.13.10_@babel+core@7.12.3 + '@babel/preset-env': 7.13.10_@babel+core@7.12.3 + '@babel/preset-react': 7.12.13_@babel+core@7.12.3 + '@svgr/core': 5.5.0 + '@svgr/plugin-jsx': 5.5.0 + '@svgr/plugin-svgo': 5.5.0 + loader-utils: 2.0.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== + /@testing-library/dom/7.30.0: + dependencies: + '@babel/code-frame': 7.12.13 + '@babel/runtime': 7.13.10 + '@types/aria-query': 4.2.1 + aria-query: 4.2.2 + chalk: 4.1.0 + dom-accessibility-api: 0.5.4 + lz-string: 1.4.4 + pretty-format: 26.6.2 + dev: false + engines: + node: '>=10' + resolution: + integrity: sha512-v4GzWtltaiDE0yRikLlcLAfEiiK8+ptu6OuuIebm9GdC2XlZTNDPGEfM2UkEtnH7hr9TRq2sivT5EA9P1Oy7bw== + /@testing-library/jest-dom/5.11.9: + dependencies: + '@babel/runtime': 7.13.10 + '@types/testing-library__jest-dom': 5.9.5 + aria-query: 4.2.2 + chalk: 3.0.0 + css: 3.0.0 + css.escape: 1.5.1 + lodash: 4.17.21 + redent: 3.0.0 + dev: false + engines: + node: '>=8' + npm: '>=6' + yarn: '>=1' + resolution: + integrity: sha512-Mn2gnA9d1wStlAIT2NU8J15LNob0YFBVjs2aEQ3j8rsfRQo+lAs7/ui1i2TGaJjapLmuNPLTsrm+nPjmZDwpcQ== + /@testing-library/react/11.2.5_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + '@testing-library/dom': 7.30.0 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + engines: + node: '>=10' + peerDependencies: + react: '*' + react-dom: '*' + resolution: + integrity: sha512-yEx7oIa/UWLe2F2dqK0FtMF9sJWNXD+2PPtp39BvE0Kh9MJ9Kl0HrZAgEuhUJR+Lx8Di6Xz+rKwSdEPY2UV8ZQ== + /@testing-library/user-event/12.8.3: + dependencies: + '@babel/runtime': 7.13.10 + dev: false + engines: + node: '>=10' + npm: '>=6' + peerDependencies: + '@testing-library/dom': '>=7.21.4' + resolution: + integrity: sha512-IR0iWbFkgd56Bu5ZI/ej8yQwrkCv8Qydx6RzwbKz9faXazR/+5tvYKsZQgyXJiwgpcva127YO6JcWy7YlCfofQ== + /@types/anymatch/1.3.1: + dev: true + resolution: + integrity: sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== + /@types/aria-query/4.2.1: + dev: false + resolution: + integrity: sha512-S6oPal772qJZHoRZLFc/XoZW2gFvwXusYUmXPXkgxJLuEk2vOt7jc4Yo6z/vtI0EBkbPBVrJJ0B+prLIKiWqHg== + /@types/babel-template/6.25.2: + dependencies: + '@types/babel-types': 7.0.9 + '@types/babylon': 6.16.5 + dev: true + resolution: + integrity: sha512-QKtDQRJmAz3Y1HSxfMl0syIHebMc/NnOeH/8qeD0zjgU2juD0uyC922biMxCy5xjTNvHinigML2l8kxE8eEBmw== + /@types/babel-types/7.0.9: + dev: true + resolution: + integrity: sha512-qZLoYeXSTgQuK1h7QQS16hqLGdmqtRmN8w/rl3Au/l5x/zkHx+a4VHrHyBsi1I1vtK2oBHxSzKIu0R5p6spdOA== + /@types/babel__core/7.1.12: + dependencies: + '@babel/parser': 7.13.11 + '@babel/types': 7.13.0 + '@types/babel__generator': 7.6.2 + '@types/babel__template': 7.4.0 + '@types/babel__traverse': 7.11.1 + dev: true + resolution: + integrity: sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ== + /@types/babel__generator/7.6.2: + dependencies: + '@babel/types': 7.13.0 + dev: true + resolution: + integrity: sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ== + /@types/babel__template/7.4.0: + dependencies: + '@babel/parser': 7.13.11 + '@babel/types': 7.13.0 + dev: true + resolution: + integrity: sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A== + /@types/babel__traverse/7.11.1: + dependencies: + '@babel/types': 7.13.0 + dev: true + resolution: + integrity: sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw== + /@types/babylon/6.16.5: + dependencies: + '@types/babel-types': 7.0.9 + dev: true + resolution: + integrity: sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w== + /@types/classnames/2.2.11: + dev: true + resolution: + integrity: sha512-2koNhpWm3DgWRp5tpkiJ8JGc1xTn2q0l+jUNUE7oMKXUf5NpI9AIdC4kbjGNFBdHtcxBD18LAksoudAVhFKCjw== + /@types/debug/4.1.5: + dev: true + resolution: + integrity: sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ== + /@types/eslint/7.2.7: + dependencies: + '@types/estree': 0.0.46 + '@types/json-schema': 7.0.7 + dev: true + resolution: + integrity: sha512-EHXbc1z2GoQRqHaAT7+grxlTJ3WE2YNeD6jlpPoRc83cCoThRY+NUWjCUZaYmk51OICkPXn2hhphcWcWXgNW0Q== + /@types/estree/0.0.39: + dev: true + resolution: + integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + /@types/estree/0.0.46: + dev: true + resolution: + integrity: sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== + /@types/file-saver/2.0.1: + dev: true + resolution: + integrity: sha512-g1QUuhYVVAamfCifK7oB7G3aIl4BbOyzDOqVyUfEr4tfBKrXfeH+M+Tg7HKCXSrbzxYdhyCP7z9WbKo0R2hBCw== + /@types/glob/7.1.3: + dependencies: + '@types/minimatch': 3.0.3 + '@types/node': 14.14.34 + dev: true + resolution: + integrity: sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + /@types/graceful-fs/4.1.5: + dependencies: + '@types/node': 14.14.34 + dev: true + resolution: + integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + /@types/history/4.7.8: + dev: true + resolution: + integrity: sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA== + /@types/hoist-non-react-statics/3.3.1: + dependencies: + '@types/react': 17.0.3 + hoist-non-react-statics: 3.3.2 + dev: true + resolution: + integrity: sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + /@types/html-minifier-terser/5.1.1: + dev: true + resolution: + integrity: sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA== + /@types/istanbul-lib-coverage/2.0.3: + resolution: + integrity: sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + /@types/istanbul-lib-report/3.0.0: + dependencies: + '@types/istanbul-lib-coverage': 2.0.3 + resolution: + integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + /@types/istanbul-reports/3.0.0: + dependencies: + '@types/istanbul-lib-report': 3.0.0 + resolution: + integrity: sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== + /@types/jest/26.0.20: + dependencies: + jest-diff: 26.6.2 + pretty-format: 26.6.2 + resolution: + integrity: sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA== + /@types/json-schema/7.0.7: + dev: true + resolution: + integrity: sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== + /@types/json5/0.0.29: + dev: true + resolution: + integrity: sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + /@types/lodash-es/4.17.4: + dependencies: + '@types/lodash': 4.14.168 + dev: true + resolution: + integrity: sha512-BBz79DCJbD2CVYZH67MBeHZRX++HF+5p8Mo5MzjZi64Wac39S3diedJYHZtScbRVf4DjZyN6LzA0SB0zy+HSSQ== + /@types/lodash/4.14.168: + dev: true + resolution: + integrity: sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q== + /@types/lru-cache/5.1.0: + dev: true + resolution: + integrity: sha512-RaE0B+14ToE4l6UqdarKPnXwVDuigfFv+5j9Dze/Nqr23yyuqdNvzcZi3xB+3Agvi5R4EOgAksfv3lXX4vBt9w== + /@types/minimatch/3.0.3: + dev: true + resolution: + integrity: sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + /@types/node/14.14.34: + resolution: + integrity: sha512-dBPaxocOK6UVyvhbnpFIj2W+S+1cBTkHQbFQfeeJhoKFbzYcVUGHvddeWPSucKATb3F0+pgDq0i6ghEaZjsugA== + /@types/normalize-package-data/2.4.0: + dev: true + resolution: + integrity: sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + /@types/parse-json/4.0.0: + dev: true + resolution: + integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + /@types/prettier/2.2.2: + dev: true + resolution: + integrity: sha512-i99hy7Ki19EqVOl77WplDrvgNugHnsSjECVR/wUrzw2TJXz1zlUfT2ngGckR6xN7yFYaijsMAqPkOLx9HgUqHg== + /@types/prop-types/15.7.3: + dev: true + resolution: + integrity: sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== + /@types/q/1.5.4: + dev: true + resolution: + integrity: sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== + /@types/react-dom/17.0.2: + dependencies: + '@types/react': 17.0.3 + dev: true + resolution: + integrity: sha512-Icd9KEgdnFfJs39KyRyr0jQ7EKhq8U6CcHRMGAS45fp5qgUvxL3ujUCfWFttUK2UErqZNj97t9gsVPNAqcwoCg== + /@types/react-redux/7.1.16: + dependencies: + '@types/hoist-non-react-statics': 3.3.1 + '@types/react': 17.0.3 + hoist-non-react-statics: 3.3.2 + redux: 4.0.5 + dev: true + resolution: + integrity: sha512-f/FKzIrZwZk7YEO9E1yoxIuDNRiDducxkFlkw/GNMGEnK9n4K8wJzlJBghpSuOVDgEUHoDkDF7Gi9lHNQR4siw== + /@types/react-router-dom/5.1.7: + dependencies: + '@types/history': 4.7.8 + '@types/react': 17.0.3 + '@types/react-router': 5.1.12 + dev: true + resolution: + integrity: sha512-D5mHD6TbdV/DNHYsnwBTv+y73ei+mMjrkGrla86HthE4/PVvL1J94Bu3qABU+COXzpL23T1EZapVVpwHuBXiUg== + /@types/react-router/5.1.12: + dependencies: + '@types/history': 4.7.8 + '@types/react': 17.0.3 + dev: true + resolution: + integrity: sha512-0bhXQwHYfMeJlCh7mGhc0VJTRm0Gk+Z8T00aiP4702mDUuLs9SMhnd2DitpjWFjdOecx2UXtICK14H9iMnziGA== + /@types/react-timeago/4.1.2: + dependencies: + '@types/react': 17.0.3 + dev: true + resolution: + integrity: sha512-gkhU3rH7aZgeRybbm9ie9wHOM9i1I5YhUoto/uqY/DAbeRZuLU8ugl6E97jp65XCl9QTij32Vs7BAX2E/MqOAw== + /@types/react/17.0.3: + dependencies: + '@types/prop-types': 15.7.3 + '@types/scheduler': 0.16.1 + csstype: 3.0.7 + dev: true + resolution: + integrity: sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg== + /@types/resolve/0.0.8: + dependencies: + '@types/node': 14.14.34 + dev: true + resolution: + integrity: sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== + /@types/scheduler/0.16.1: + dev: true + resolution: + integrity: sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA== + /@types/semver/7.3.4: + dev: true + resolution: + integrity: sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ== + /@types/shallowequal/1.1.1: + dev: true + resolution: + integrity: sha512-Lhni3aX80zbpdxRuWhnuYPm8j8UQaa571lHP/xI4W+7BAFhSIhRReXnqjEgT/XzPoXZTJkCqstFMJ8CZTK6IlQ== + /@types/source-list-map/0.1.2: + dev: true + resolution: + integrity: sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== + /@types/stack-utils/2.0.0: + dev: true + resolution: + integrity: sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== + /@types/tapable/1.0.6: + dev: true + resolution: + integrity: sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA== + /@types/testing-library__jest-dom/5.9.5: + dependencies: + '@types/jest': 26.0.20 + dev: false + resolution: + integrity: sha512-ggn3ws+yRbOHog9GxnXiEZ/35Mow6YtPZpd7Z5mKDeZS/o7zx3yAle0ov/wjhVB5QT4N2Dt+GNoGCdqkBGCajQ== + /@types/uglify-js/3.13.0: + dependencies: + source-map: 0.6.1 + dev: true + resolution: + integrity: sha512-EGkrJD5Uy+Pg0NUR8uA4bJ5WMfljyad0G+784vLCNUkD+QwOJXUbBYExXfVGf7YtyzdQp3L/XMYcliB987kL5Q== + /@types/uuid/8.3.0: + dev: true + resolution: + integrity: sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ== + /@types/webpack-env/1.16.0: + dev: true + resolution: + integrity: sha512-Fx+NpfOO0CpeYX2g9bkvX8O5qh9wrU1sOF4g8sft4Mu7z+qfe387YlyY8w8daDyDsKY5vUxM0yxkAYnbkRbZEw== + /@types/webpack-sources/2.1.0: + dependencies: + '@types/node': 14.14.34 + '@types/source-list-map': 0.1.2 + source-map: 0.7.3 + dev: true + resolution: + integrity: sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg== + /@types/webpack/4.41.26: + dependencies: + '@types/anymatch': 1.3.1 + '@types/node': 14.14.34 + '@types/tapable': 1.0.6 + '@types/uglify-js': 3.13.0 + '@types/webpack-sources': 2.1.0 + source-map: 0.6.1 + dev: true + resolution: + integrity: sha512-7ZyTfxjCRwexh+EJFwRUM+CDB2XvgHl4vfuqf1ZKrgGvcS5BrNvPQqJh3tsZ0P6h6Aa1qClVHaJZszLPzpqHeA== + /@types/yargs-parser/20.2.0: + resolution: + integrity: sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== + /@types/yargs/15.0.13: + dependencies: + '@types/yargs-parser': 20.2.0 + resolution: + integrity: sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ== + /@typescript-eslint/eslint-plugin/4.15.3-alpha.17_e20b0dcb4d72879efd3787e2a56fd748: + dependencies: + '@typescript-eslint/experimental-utils': 4.15.3-alpha.17_eslint@7.22.0+typescript@4.1.5 + '@typescript-eslint/parser': 4.15.3-alpha.17_eslint@7.22.0+typescript@4.1.5 + '@typescript-eslint/scope-manager': 4.15.3-alpha.17 + debug: 4.3.1 + eslint: 7.22.0 + functional-red-black-tree: 1.0.1 + lodash: 4.17.21 + regexpp: 3.1.0 + semver: 7.3.4 + tsutils: 3.21.0_typescript@4.1.5 + typescript: 4.1.5 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + peerDependencies: + '@typescript-eslint/parser': ^4.0.0 + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + resolution: + integrity: sha512-gyG/9a5FRxAEDOMJvsu/dBOAnXobwV21SG2cmOT/hT1Pu8vbwiRNOsGQbWIlrM9z0NJC6mM/EsN9nSjzVDnXcw== + /@typescript-eslint/eslint-plugin/4.17.0_5999a92f4ea517bc2e240e03c336061d: + dependencies: + '@typescript-eslint/experimental-utils': 4.17.0_eslint@7.22.0+typescript@4.1.5 + '@typescript-eslint/parser': 4.17.0_eslint@7.22.0+typescript@4.1.5 + '@typescript-eslint/scope-manager': 4.17.0 + debug: 4.3.1 + eslint: 7.22.0 + functional-red-black-tree: 1.0.1 + lodash: 4.17.21 + regexpp: 3.1.0 + semver: 7.3.4 + tsutils: 3.21.0_typescript@4.1.5 + typescript: 4.1.5 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + peerDependencies: + '@typescript-eslint/parser': ^4.0.0 + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + resolution: + integrity: sha512-/fKFDcoHg8oNan39IKFOb5WmV7oWhQe1K6CDaAVfJaNWEhmfqlA24g+u1lqU5bMH7zuNasfMId4LaYWC5ijRLw== + /@typescript-eslint/experimental-utils/3.10.1_eslint@7.22.0+typescript@4.1.5: + dependencies: + '@types/json-schema': 7.0.7 + '@typescript-eslint/types': 3.10.1 + '@typescript-eslint/typescript-estree': 3.10.1_typescript@4.1.5 + eslint: 7.22.0 + eslint-scope: 5.1.1 + eslint-utils: 2.1.0 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + peerDependencies: + eslint: '*' + typescript: '*' + resolution: + integrity: sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw== + /@typescript-eslint/experimental-utils/4.15.3-alpha.17_eslint@7.22.0+typescript@4.1.5: + dependencies: + '@types/json-schema': 7.0.7 + '@typescript-eslint/scope-manager': 4.15.3-alpha.17 + '@typescript-eslint/types': 4.15.3-alpha.17 + '@typescript-eslint/typescript-estree': 4.15.3-alpha.17_typescript@4.1.5 + eslint: 7.22.0 + eslint-scope: 5.1.1 + eslint-utils: 2.1.0 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + peerDependencies: + eslint: '*' + typescript: '*' + resolution: + integrity: sha512-m/F2+wq9Ijfdce7GMicfmNn1WAlp5xAT0+wDx3iVU5+uQfWuw0eA42IdlOPHsG7cnWRAFHhMP2ptXJR0lI3oPQ== + /@typescript-eslint/experimental-utils/4.17.0_eslint@7.22.0+typescript@4.1.5: + dependencies: + '@types/json-schema': 7.0.7 + '@typescript-eslint/scope-manager': 4.17.0 + '@typescript-eslint/types': 4.17.0 + '@typescript-eslint/typescript-estree': 4.17.0_typescript@4.1.5 + eslint: 7.22.0 + eslint-scope: 5.1.1 + eslint-utils: 2.1.0 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + peerDependencies: + eslint: '*' + typescript: '*' + resolution: + integrity: sha512-ZR2NIUbnIBj+LGqCFGQ9yk2EBQrpVVFOh9/Kd0Lm6gLpSAcCuLLe5lUCibKGCqyH9HPwYC0GIJce2O1i8VYmWA== + /@typescript-eslint/parser/4.15.3-alpha.17_eslint@7.22.0+typescript@4.1.5: + dependencies: + '@typescript-eslint/scope-manager': 4.15.3-alpha.17 + '@typescript-eslint/types': 4.15.3-alpha.17 + '@typescript-eslint/typescript-estree': 4.15.3-alpha.17_typescript@4.1.5 + debug: 4.3.1 + eslint: 7.22.0 + typescript: 4.1.5 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + peerDependencies: + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + resolution: + integrity: sha512-J7c6MXTnPM48ofQfba/3hd3wYuo1LmYW9F6RMscD3WdScpljMQ8XDL0XGg1js4184aywG2NgnKQT35+kELgS4Q== + /@typescript-eslint/parser/4.17.0_eslint@7.22.0+typescript@4.1.5: + dependencies: + '@typescript-eslint/scope-manager': 4.17.0 + '@typescript-eslint/types': 4.17.0 + '@typescript-eslint/typescript-estree': 4.17.0_typescript@4.1.5 + debug: 4.3.1 + eslint: 7.22.0 + typescript: 4.1.5 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + peerDependencies: + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + resolution: + integrity: sha512-KYdksiZQ0N1t+6qpnl6JeK9ycCFprS9xBAiIrw4gSphqONt8wydBw4BXJi3C11ywZmyHulvMaLjWsxDjUSDwAw== + /@typescript-eslint/scope-manager/4.15.3-alpha.17: + dependencies: + '@typescript-eslint/types': 4.15.3-alpha.17 + '@typescript-eslint/visitor-keys': 4.15.3-alpha.17 + dev: true + engines: + node: ^8.10.0 || ^10.13.0 || >=11.10.1 + resolution: + integrity: sha512-kyn1Q44UWK0c/Y+SwZl4bmH59nRA7nG7YHNZvt+hVuCJOpaAgBYVKDMGZnwFTOCBRCUyyjksH145a2Xucdh72A== + /@typescript-eslint/scope-manager/4.17.0: + dependencies: + '@typescript-eslint/types': 4.17.0 + '@typescript-eslint/visitor-keys': 4.17.0 + dev: true + engines: + node: ^8.10.0 || ^10.13.0 || >=11.10.1 + resolution: + integrity: sha512-OJ+CeTliuW+UZ9qgULrnGpPQ1bhrZNFpfT/Bc0pzNeyZwMik7/ykJ0JHnQ7krHanFN9wcnPK89pwn84cRUmYjw== + /@typescript-eslint/types/3.10.1: + dev: true + engines: + node: ^8.10.0 || ^10.13.0 || >=11.10.1 + resolution: + integrity: sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ== + /@typescript-eslint/types/4.15.3-alpha.17: + dev: true + engines: + node: ^8.10.0 || ^10.13.0 || >=11.10.1 + resolution: + integrity: sha512-xM7Ico8kknqkFpbkIEQeagwR2DlHQbWAXKivzyDPbQFuntQ2Hv/rTthnUP88aCiD7gUJCz/IXofKD79Ky3U5dg== + /@typescript-eslint/types/4.17.0: + dev: true + engines: + node: ^8.10.0 || ^10.13.0 || >=11.10.1 + resolution: + integrity: sha512-RN5z8qYpJ+kXwnLlyzZkiJwfW2AY458Bf8WqllkondQIcN2ZxQowAToGSd9BlAUZDB5Ea8I6mqL2quGYCLT+2g== + /@typescript-eslint/typescript-estree/3.10.1_typescript@4.1.5: + dependencies: + '@typescript-eslint/types': 3.10.1 + '@typescript-eslint/visitor-keys': 3.10.1 + debug: 4.3.1 + glob: 7.1.6 + is-glob: 4.0.1 + lodash: 4.17.21 + semver: 7.3.4 + tsutils: 3.21.0_typescript@4.1.5 + typescript: 4.1.5 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + resolution: + integrity: sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w== + /@typescript-eslint/typescript-estree/4.15.3-alpha.17_typescript@4.1.5: + dependencies: + '@typescript-eslint/types': 4.15.3-alpha.17 + '@typescript-eslint/visitor-keys': 4.15.3-alpha.17 + debug: 4.3.1 + globby: 11.0.2 + is-glob: 4.0.1 + semver: 7.3.4 + tsutils: 3.21.0_typescript@4.1.5 + typescript: 4.1.5 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + resolution: + integrity: sha512-kH7r/enZ98KxNfFg7C3VqswVHmp47ZNlYzzGG77NoFPaHVEtOl2aIULH7FrHYn+/mydeqKRWIk/Gpff1/cbVkg== + /@typescript-eslint/typescript-estree/4.17.0_typescript@4.1.5: + dependencies: + '@typescript-eslint/types': 4.17.0 + '@typescript-eslint/visitor-keys': 4.17.0 + debug: 4.3.1 + globby: 11.0.2 + is-glob: 4.0.1 + semver: 7.3.4 + tsutils: 3.21.0_typescript@4.1.5 + typescript: 4.1.5 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + resolution: + integrity: sha512-lRhSFIZKUEPPWpWfwuZBH9trYIEJSI0vYsrxbvVvNyIUDoKWaklOAelsSkeh3E2VBSZiNe9BZ4E5tYBZbUczVQ== + /@typescript-eslint/visitor-keys/3.10.1: + dependencies: + eslint-visitor-keys: 1.3.0 + dev: true + engines: + node: ^8.10.0 || ^10.13.0 || >=11.10.1 + resolution: + integrity: sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ== + /@typescript-eslint/visitor-keys/4.15.3-alpha.17: + dependencies: + '@typescript-eslint/types': 4.15.3-alpha.17 + eslint-visitor-keys: 2.0.0 + dev: true + engines: + node: ^8.10.0 || ^10.13.0 || >=11.10.1 + resolution: + integrity: sha512-koywimhlOO1y5TtoiM9W5D7uxeGchhbvw28+4l3OiaC6MJ9qwqW0XpaPFsziR6M+vy4LijZLpkiUmUZwDh+xrw== + /@typescript-eslint/visitor-keys/4.17.0: + dependencies: + '@typescript-eslint/types': 4.17.0 + eslint-visitor-keys: 2.0.0 + dev: true + engines: + node: ^8.10.0 || ^10.13.0 || >=11.10.1 + resolution: + integrity: sha512-WfuMN8mm5SSqXuAr9NM+fItJ0SVVphobWYkWOwQ1odsfC014Vdxk/92t4JwS1Q6fCA/ABfCKpa3AVtpUKTNKGQ== + /@webassemblyjs/ast/1.9.0: + dependencies: + '@webassemblyjs/helper-module-context': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/wast-parser': 1.9.0 + dev: true + resolution: + integrity: sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + /@webassemblyjs/floating-point-hex-parser/1.9.0: + dev: true + resolution: + integrity: sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + /@webassemblyjs/helper-api-error/1.9.0: + dev: true + resolution: + integrity: sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + /@webassemblyjs/helper-buffer/1.9.0: + dev: true + resolution: + integrity: sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + /@webassemblyjs/helper-code-frame/1.9.0: + dependencies: + '@webassemblyjs/wast-printer': 1.9.0 + dev: true + resolution: + integrity: sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + /@webassemblyjs/helper-fsm/1.9.0: + dev: true + resolution: + integrity: sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + /@webassemblyjs/helper-module-context/1.9.0: + dependencies: + '@webassemblyjs/ast': 1.9.0 + dev: true + resolution: + integrity: sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + /@webassemblyjs/helper-wasm-bytecode/1.9.0: + dev: true + resolution: + integrity: sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + /@webassemblyjs/helper-wasm-section/1.9.0: + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-buffer': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/wasm-gen': 1.9.0 + dev: true + resolution: + integrity: sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + /@webassemblyjs/ieee754/1.9.0: + dependencies: + '@xtuc/ieee754': 1.2.0 + dev: true + resolution: + integrity: sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + /@webassemblyjs/leb128/1.9.0: + dependencies: + '@xtuc/long': 4.2.2 + dev: true + resolution: + integrity: sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + /@webassemblyjs/utf8/1.9.0: + dev: true + resolution: + integrity: sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + /@webassemblyjs/wasm-edit/1.9.0: + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-buffer': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/helper-wasm-section': 1.9.0 + '@webassemblyjs/wasm-gen': 1.9.0 + '@webassemblyjs/wasm-opt': 1.9.0 + '@webassemblyjs/wasm-parser': 1.9.0 + '@webassemblyjs/wast-printer': 1.9.0 + dev: true + resolution: + integrity: sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + /@webassemblyjs/wasm-gen/1.9.0: + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/ieee754': 1.9.0 + '@webassemblyjs/leb128': 1.9.0 + '@webassemblyjs/utf8': 1.9.0 + dev: true + resolution: + integrity: sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + /@webassemblyjs/wasm-opt/1.9.0: + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-buffer': 1.9.0 + '@webassemblyjs/wasm-gen': 1.9.0 + '@webassemblyjs/wasm-parser': 1.9.0 + dev: true + resolution: + integrity: sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + /@webassemblyjs/wasm-parser/1.9.0: + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-api-error': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/ieee754': 1.9.0 + '@webassemblyjs/leb128': 1.9.0 + '@webassemblyjs/utf8': 1.9.0 + dev: true + resolution: + integrity: sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + /@webassemblyjs/wast-parser/1.9.0: + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/floating-point-hex-parser': 1.9.0 + '@webassemblyjs/helper-api-error': 1.9.0 + '@webassemblyjs/helper-code-frame': 1.9.0 + '@webassemblyjs/helper-fsm': 1.9.0 + '@xtuc/long': 4.2.2 + dev: true + resolution: + integrity: sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + /@webassemblyjs/wast-printer/1.9.0: + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/wast-parser': 1.9.0 + '@xtuc/long': 4.2.2 + dev: true + resolution: + integrity: sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + /@xtuc/ieee754/1.2.0: + dev: true + resolution: + integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + /@xtuc/long/4.2.2: + dev: true + resolution: + integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + /abab/2.0.5: + dev: true + resolution: + integrity: sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + /accepts/1.3.7: + dependencies: + mime-types: 2.1.29 + negotiator: 0.6.2 + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + /acorn-globals/6.0.0: + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + dev: true + resolution: + integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + /acorn-jsx/5.3.1_acorn@7.4.1: + dependencies: + acorn: 7.4.1 + dev: true + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + resolution: + integrity: sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== + /acorn-walk/7.2.0: + dev: true + engines: + node: '>=0.4.0' + resolution: + integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + /acorn-walk/8.0.2: + dev: true + engines: + node: '>=0.4.0' + resolution: + integrity: sha512-+bpA9MJsHdZ4bgfDcpk0ozQyhhVct7rzOmO0s1IIr0AGGgKBljss8n2zp11rRP2wid5VGeh04CgeKzgat5/25A== + /acorn/6.4.2: + dev: true + engines: + node: '>=0.4.0' + hasBin: true + resolution: + integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + /acorn/7.4.1: + dev: true + engines: + node: '>=0.4.0' + hasBin: true + resolution: + integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + /acorn/8.1.0: + dev: true + engines: + node: '>=0.4.0' + hasBin: true + resolution: + integrity: sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA== + /address/1.1.2: + dev: true + engines: + node: '>= 0.12.0' + resolution: + integrity: sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== + /adjust-sourcemap-loader/3.0.0: + dependencies: + loader-utils: 2.0.0 + regex-parser: 2.2.11 + dev: true + engines: + node: '>=8.9' + resolution: + integrity: sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw== + /aggregate-error/3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + /ajv-errors/1.0.1_ajv@6.12.6: + dependencies: + ajv: 6.12.6 + dev: true + peerDependencies: + ajv: '>=5.0.0' + resolution: + integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + /ajv-keywords/3.5.2_ajv@6.12.6: + dependencies: + ajv: 6.12.6 + dev: true + peerDependencies: + ajv: ^6.9.1 + resolution: + integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + /ajv/6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + resolution: + integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + /ajv/7.2.1: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: true + resolution: + integrity: sha512-+nu0HDv7kNSOua9apAVc979qd932rrZeb3WOvoiD31A/p1mIE5/9bN2027pE2rOPYEdS3UHzsvof4hY+lM9/WQ== + /alphanum-sort/1.0.2: + dev: true + resolution: + integrity: sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + /ansi-colors/3.2.4: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + /ansi-colors/4.1.1: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + /ansi-escapes/4.3.1: + dependencies: + type-fest: 0.11.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + /ansi-html/0.0.7: + dev: true + engines: + '0': node >= 0.8.0 + hasBin: true + resolution: + integrity: sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + /ansi-regex/2.1.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + /ansi-regex/4.1.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + /ansi-regex/5.0.0: + engines: + node: '>=8' + resolution: + integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + /ansi-styles/2.2.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + /ansi-styles/3.2.1: + dependencies: + color-convert: 1.9.3 + engines: + node: '>=4' + resolution: + integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + /ansi-styles/4.3.0: + dependencies: + color-convert: 2.0.1 + engines: + node: '>=8' + resolution: + integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + /antd-dayjs-webpack-plugin/1.0.6_dayjs@1.10.4: + dependencies: + dayjs: 1.10.4 + dev: true + peerDependencies: + dayjs: '*' + resolution: + integrity: sha512-UlK3BfA0iE2c5+Zz/Bd2iPAkT6cICtrKG4/swSik5MZweBHtgmu1aUQCHvICdiv39EAShdZy/edfP6mlkS/xXg== + /antd/4.14.0_89622fd8e4ec221151a62783d49305af: + dependencies: + '@ant-design/colors': 6.0.0 + '@ant-design/icons': 4.5.0_react-dom@17.0.1+react@17.0.1 + '@ant-design/react-slick': 0.28.2 + '@babel/runtime': 7.13.10 + array-tree-filter: 2.1.0 + classnames: 2.2.6 + copy-to-clipboard: 3.3.1 + lodash: 4.17.21 + moment: 2.29.1 + rc-cascader: 1.4.2_react-dom@17.0.1+react@17.0.1 + rc-checkbox: 2.3.2_react-dom@17.0.1+react@17.0.1 + rc-collapse: 3.1.0_react-dom@17.0.1+react@17.0.1 + rc-dialog: 8.5.2_react-dom@17.0.1+react@17.0.1 + rc-drawer: 4.3.1_react-dom@17.0.1+react@17.0.1 + rc-dropdown: 3.2.0_react-dom@17.0.1+react@17.0.1 + rc-field-form: 1.20.0_react-dom@17.0.1+react@17.0.1 + rc-image: 5.2.3_react-dom@17.0.1+react@17.0.1 + rc-input-number: 7.0.2_react-dom@17.0.1+react@17.0.1 + rc-mentions: 1.5.3_react-dom@17.0.1+react@17.0.1 + rc-menu: 8.10.6_react-dom@17.0.1+react@17.0.1 + rc-motion: 2.4.1_react-dom@17.0.1+react@17.0.1 + rc-notification: 4.5.5_react-dom@17.0.1+react@17.0.1 + rc-pagination: 3.1.6_react-dom@17.0.1+react@17.0.1 + rc-picker: 2.5.10_89622fd8e4ec221151a62783d49305af + rc-progress: 3.1.3_react-dom@17.0.1+react@17.0.1 + rc-rate: 2.9.1_react-dom@17.0.1+react@17.0.1 + rc-resize-observer: 1.0.0_react-dom@17.0.1+react@17.0.1 + rc-select: 12.1.6_react-dom@17.0.1+react@17.0.1 + rc-slider: 9.7.1_react-dom@17.0.1+react@17.0.1 + rc-steps: 4.1.3_react-dom@17.0.1+react@17.0.1 + rc-switch: 3.2.2_react-dom@17.0.1+react@17.0.1 + rc-table: 7.13.2_react-dom@17.0.1+react@17.0.1 + rc-tabs: 11.7.3_react-dom@17.0.1+react@17.0.1 + rc-textarea: 0.3.4_react-dom@17.0.1+react@17.0.1 + rc-tooltip: 5.1.0_react-dom@17.0.1+react@17.0.1 + rc-tree: 4.1.5_react-dom@17.0.1+react@17.0.1 + rc-tree-select: 4.3.0_react-dom@17.0.1+react@17.0.1 + rc-trigger: 5.2.3_react-dom@17.0.1+react@17.0.1 + rc-upload: 4.2.0-alpha.0_react-dom@17.0.1+react@17.0.1 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + scroll-into-view-if-needed: 2.2.27 + warning: 4.0.3 + dev: false + peerDependencies: + dayjs: '*' + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-K0VG6Ion4gGX8Lo8mJVfNDD8JrHjTq/qlBkicmpZGQXOOAWi19EElH2RpKGN1+WD4OXekWo6dZkSDmK2Lzxe5Q== + /anymatch/2.0.0: + dependencies: + micromatch: 3.1.10 + normalize-path: 2.1.1 + dev: true + resolution: + integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + /anymatch/3.1.1: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.2.2 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + /aproba/1.2.0: + dev: true + resolution: + integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + /argparse/1.0.10: + dependencies: + sprintf-js: 1.0.3 + dev: true + resolution: + integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + /aria-query/4.2.2: + dependencies: + '@babel/runtime': 7.13.10 + '@babel/runtime-corejs3': 7.13.10 + engines: + node: '>=6.0' + resolution: + integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + /arity-n/1.0.4: + dev: true + resolution: + integrity: sha1-2edrEXM+CFacCEeuezmyhgswt0U= + /arr-diff/4.0.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + /arr-flatten/1.1.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + /arr-union/3.1.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + /array-flatten/1.1.1: + dev: true + resolution: + integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + /array-flatten/2.1.2: + dev: true + resolution: + integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + /array-includes/3.1.3: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.0 + get-intrinsic: 1.1.1 + is-string: 1.0.5 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== + /array-tree-filter/2.1.0: + dev: false + resolution: + integrity: sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw== + /array-union/1.0.2: + dependencies: + array-uniq: 1.0.3 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + /array-union/2.1.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + /array-uniq/1.0.3: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + /array-unique/0.3.2: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + /array.prototype.flat/1.2.4: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.0 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== + /array.prototype.flatmap/1.2.4: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.0 + function-bind: 1.1.1 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== + /arrify/2.0.1: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + /asap/2.0.6: + dev: true + resolution: + integrity: sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + /asn1.js/5.4.1: + dependencies: + bn.js: 4.12.0 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + safer-buffer: 2.1.2 + dev: true + resolution: + integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + /asn1/0.2.4: + dependencies: + safer-buffer: 2.1.2 + dev: true + resolution: + integrity: sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + /assert-plus/1.0.0: + dev: true + engines: + node: '>=0.8' + resolution: + integrity: sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + /assert/1.5.0: + dependencies: + object-assign: 4.1.1 + util: 0.10.3 + dev: true + resolution: + integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + /assign-symbols/1.0.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + /ast-types-flow/0.0.7: + dev: true + resolution: + integrity: sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + /astral-regex/2.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + /async-each/1.0.3: + dev: true + resolution: + integrity: sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + /async-limiter/1.0.1: + dev: true + resolution: + integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + /async-mutex/0.3.1: + dependencies: + tslib: 2.1.0 + dev: false + resolution: + integrity: sha512-vRfQwcqBnJTLzVQo72Sf7KIUbcSUP5hNchx6udI1U6LuPQpfePgdjJzlCe76yFZ8pxlLjn9lwcl/Ya0TSOv0Tw== + /async-validator/3.5.1: + dev: false + resolution: + integrity: sha512-DDmKA7sdSAJtTVeNZHrnr2yojfFaoeW8MfQN8CeuXg8DDQHTqKk9Fdv38dSvnesHoO8MUwMI2HphOeSyIF+wmQ== + /async/2.6.3: + dependencies: + lodash: 4.17.21 + dev: true + resolution: + integrity: sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + /asynckit/0.4.0: + dev: true + resolution: + integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k= + /at-least-node/1.0.0: + dev: true + engines: + node: '>= 4.0.0' + resolution: + integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + /atob/2.1.2: + engines: + node: '>= 4.5.0' + hasBin: true + resolution: + integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + /autoprefixer/9.8.6: + dependencies: + browserslist: 4.16.3 + caniuse-lite: 1.0.30001200 + colorette: 1.2.2 + normalize-range: 0.1.2 + num2fraction: 1.2.2 + postcss: 7.0.35 + postcss-value-parser: 4.1.0 + dev: true + hasBin: true + resolution: + integrity: sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== + /await-to-js/2.1.1: + dev: false + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-CHBC6gQGCIzjZ09tJ+XmpQoZOn4GdWePB4qUweCaKNJ0D3f115YdhmYVTZ4rMVpiJ3cFzZcTYK1VMYEICV4YXw== + /aws-sign2/0.7.0: + dev: true + resolution: + integrity: sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + /aws4/1.11.0: + dev: true + resolution: + integrity: sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + /axe-core/4.1.3: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-vwPpH4Aj4122EW38mxO/fxhGKtwWTMLDIJfZ1He0Edbtjcfna/R3YB67yVhezUMzqc3Jr3+Ii50KRntlENL4xQ== + /axobject-query/2.2.0: + dev: true + resolution: + integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== + /babel-code-frame/6.26.0: + dependencies: + chalk: 1.1.3 + esutils: 2.0.3 + js-tokens: 3.0.2 + dev: true + resolution: + integrity: sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + /babel-eslint/10.1.0_eslint@7.22.0: + dependencies: + '@babel/code-frame': 7.12.13 + '@babel/parser': 7.13.11 + '@babel/traverse': 7.13.0 + '@babel/types': 7.13.0 + eslint: 7.22.0 + eslint-visitor-keys: 1.3.0 + resolve: 1.18.1 + deprecated: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates. + dev: true + engines: + node: '>=6' + peerDependencies: + eslint: '>= 4.12.1' + resolution: + integrity: sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== + /babel-extract-comments/1.0.0: + dependencies: + babylon: 6.18.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ== + /babel-jest/26.6.3_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@jest/transform': 26.6.2 + '@jest/types': 26.6.2 + '@types/babel__core': 7.1.12 + babel-plugin-istanbul: 6.0.0 + babel-preset-jest: 26.6.2_@babel+core@7.12.3 + chalk: 4.1.0 + graceful-fs: 4.2.6 + slash: 3.0.0 + dev: true + engines: + node: '>= 10.14.2' + peerDependencies: + '@babel/core': ^7.0.0 + resolution: + integrity: sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== + /babel-loader/8.1.0_427212bc1158d185e577033f19ca0757: + dependencies: + '@babel/core': 7.12.3 + find-cache-dir: 2.1.0 + loader-utils: 1.4.0 + mkdirp: 0.5.5 + pify: 4.0.1 + schema-utils: 2.7.1 + webpack: 4.44.2 + dev: true + engines: + node: '>= 6.9' + peerDependencies: + '@babel/core': ^7.0.0 + webpack: '>=2' + resolution: + integrity: sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== + /babel-messages/6.23.0: + dependencies: + babel-runtime: 6.26.0 + dev: true + resolution: + integrity: sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + /babel-plugin-dynamic-import-node/2.3.3: + dependencies: + object.assign: 4.1.2 + dev: true + resolution: + integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + /babel-plugin-istanbul/6.0.0: + dependencies: + '@babel/helper-plugin-utils': 7.13.0 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 4.0.3 + test-exclude: 6.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== + /babel-plugin-jest-hoist/26.6.2: + dependencies: + '@babel/template': 7.12.13 + '@babel/types': 7.13.0 + '@types/babel__core': 7.1.12 + '@types/babel__traverse': 7.11.1 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== + /babel-plugin-lodash/3.3.4: + dependencies: + '@babel/helper-module-imports': 7.12.13 + '@babel/types': 7.13.0 + glob: 7.1.6 + lodash: 4.17.21 + require-package-name: 2.0.1 + dev: true + resolution: + integrity: sha512-yDZLjK7TCkWl1gpBeBGmuaDIFhZKmkoL+Cu2MUUjv5VxUZx/z7tBGBCBcQs5RI1Bkz5LLmNdjx7paOyQtMovyg== + /babel-plugin-macros/2.8.0: + dependencies: + '@babel/runtime': 7.12.1 + cosmiconfig: 6.0.0 + resolve: 1.18.1 + dev: true + resolution: + integrity: sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== + /babel-plugin-named-asset-import/0.3.7_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.1.0 + resolution: + integrity: sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw== + /babel-plugin-polyfill-corejs2/0.1.10_@babel+core@7.12.3: + dependencies: + '@babel/compat-data': 7.13.11 + '@babel/core': 7.12.3 + '@babel/helper-define-polyfill-provider': 0.1.5_@babel+core@7.12.3 + semver: 6.3.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA== + /babel-plugin-polyfill-corejs3/0.1.7_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-define-polyfill-provider': 0.1.5_@babel+core@7.12.3 + core-js-compat: 3.9.1 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw== + /babel-plugin-polyfill-regenerator/0.1.6_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-define-polyfill-provider': 0.1.5_@babel+core@7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg== + /babel-plugin-syntax-object-rest-spread/6.13.0: + dev: true + resolution: + integrity: sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= + /babel-plugin-transform-object-rest-spread/6.26.0: + dependencies: + babel-plugin-syntax-object-rest-spread: 6.13.0 + babel-runtime: 6.26.0 + dev: true + resolution: + integrity: sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= + /babel-plugin-transform-react-remove-prop-types/0.4.24: + dev: true + resolution: + integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== + /babel-preset-current-node-syntax/1.0.1_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.12.3 + '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.12.3 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.12.3 + '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.12.3 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.12.3 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.12.3 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.12.3 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.12.3 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.12.3 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.12.3 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.12.3 + '@babel/plugin-syntax-top-level-await': 7.12.13_@babel+core@7.12.3 + dev: true + peerDependencies: + '@babel/core': ^7.0.0 + resolution: + integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + /babel-preset-jest/26.6.2_@babel+core@7.12.3: + dependencies: + '@babel/core': 7.12.3 + babel-plugin-jest-hoist: 26.6.2 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.12.3 + dev: true + engines: + node: '>= 10.14.2' + peerDependencies: + '@babel/core': ^7.0.0 + resolution: + integrity: sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== + /babel-preset-react-app/10.0.0: + dependencies: + '@babel/core': 7.12.3 + '@babel/plugin-proposal-class-properties': 7.12.1_@babel+core@7.12.3 + '@babel/plugin-proposal-decorators': 7.12.1_@babel+core@7.12.3 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.12.1_@babel+core@7.12.3 + '@babel/plugin-proposal-numeric-separator': 7.12.1_@babel+core@7.12.3 + '@babel/plugin-proposal-optional-chaining': 7.12.1_@babel+core@7.12.3 + '@babel/plugin-transform-flow-strip-types': 7.12.1_@babel+core@7.12.3 + '@babel/plugin-transform-react-display-name': 7.12.1_@babel+core@7.12.3 + '@babel/plugin-transform-runtime': 7.12.1_@babel+core@7.12.3 + '@babel/preset-env': 7.12.1_@babel+core@7.12.3 + '@babel/preset-react': 7.12.1_@babel+core@7.12.3 + '@babel/preset-typescript': 7.12.1_@babel+core@7.12.3 + '@babel/runtime': 7.12.1 + babel-plugin-macros: 2.8.0 + babel-plugin-transform-react-remove-prop-types: 0.4.24 + dev: true + resolution: + integrity: sha512-itL2z8v16khpuKutx5IH8UdCdSTuzrOhRFTEdIhveZ2i1iBKDrVE0ATa4sFVy+02GLucZNVBWtoarXBy0Msdpg== + /babel-runtime/6.26.0: + dependencies: + core-js: 2.6.12 + regenerator-runtime: 0.11.1 + dev: true + resolution: + integrity: sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + /babel-template/6.26.0: + dependencies: + babel-runtime: 6.26.0 + babel-traverse: 6.26.0 + babel-types: 6.26.0 + babylon: 6.18.0 + lodash: 4.17.21 + dev: true + resolution: + integrity: sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + /babel-traverse/6.26.0: + dependencies: + babel-code-frame: 6.26.0 + babel-messages: 6.23.0 + babel-runtime: 6.26.0 + babel-types: 6.26.0 + babylon: 6.18.0 + debug: 2.6.9 + globals: 9.18.0 + invariant: 2.2.4 + lodash: 4.17.21 + dev: true + resolution: + integrity: sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + /babel-types/6.26.0: + dependencies: + babel-runtime: 6.26.0 + esutils: 2.0.3 + lodash: 4.17.21 + to-fast-properties: 1.0.3 + dev: true + resolution: + integrity: sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + /babylon/6.18.0: + dev: true + hasBin: true + resolution: + integrity: sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + /balanced-match/1.0.0: + dev: true + resolution: + integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + /base/0.11.2: + dependencies: + cache-base: 1.0.1 + class-utils: 0.3.6 + component-emitter: 1.3.0 + define-property: 1.0.0 + isobject: 3.0.1 + mixin-deep: 1.3.2 + pascalcase: 0.1.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + /base64-arraybuffer/0.2.0: + dev: false + engines: + node: '>= 0.6.0' + resolution: + integrity: sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ== + /base64-js/1.5.1: + dev: true + resolution: + integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + /batch/0.6.1: + dev: true + resolution: + integrity: sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + /bcrypt-pbkdf/1.0.2: + dependencies: + tweetnacl: 0.14.5 + dev: true + resolution: + integrity: sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + /bfj/7.0.2: + dependencies: + bluebird: 3.7.2 + check-types: 11.1.2 + hoopy: 0.1.4 + tryer: 1.0.1 + dev: true + engines: + node: '>= 8.0.0' + resolution: + integrity: sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw== + /big.js/5.2.2: + dev: true + resolution: + integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + /binary-extensions/1.13.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + /binary-extensions/2.2.0: + dev: true + engines: + node: '>=8' + optional: true + resolution: + integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + /bindings/1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + dev: true + optional: true + resolution: + integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + /bluebird/3.7.2: + dev: true + resolution: + integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + /bn.js/4.12.0: + dev: true + resolution: + integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + /bn.js/5.2.0: + dev: true + resolution: + integrity: sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== + /body-parser/1.19.0: + dependencies: + bytes: 3.1.0 + content-type: 1.0.4 + debug: 2.6.9 + depd: 1.1.2 + http-errors: 1.7.2 + iconv-lite: 0.4.24 + on-finished: 2.3.0 + qs: 6.7.0 + raw-body: 2.4.0 + type-is: 1.6.18 + dev: true + engines: + node: '>= 0.8' + resolution: + integrity: sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + /bonjour/3.5.0: + dependencies: + array-flatten: 2.1.2 + deep-equal: 1.1.1 + dns-equal: 1.0.0 + dns-txt: 2.0.2 + multicast-dns: 6.2.3 + multicast-dns-service-types: 1.1.0 + dev: true + resolution: + integrity: sha1-jokKGD2O6aI5OzhExpGkK897yfU= + /boolbase/1.0.0: + dev: true + resolution: + integrity: sha1-aN/1++YMUes3cl6p4+0xDcwed24= + /brace-expansion/1.1.11: + dependencies: + balanced-match: 1.0.0 + concat-map: 0.0.1 + dev: true + resolution: + integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + /braces/2.3.2: + dependencies: + arr-flatten: 1.1.0 + array-unique: 0.3.2 + extend-shallow: 2.0.1 + fill-range: 4.0.0 + isobject: 3.0.1 + repeat-element: 1.1.3 + snapdragon: 0.8.2 + snapdragon-node: 2.1.1 + split-string: 3.1.0 + to-regex: 3.0.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + /braces/3.0.2: + dependencies: + fill-range: 7.0.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + /brorand/1.1.0: + dev: true + resolution: + integrity: sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + /browser-process-hrtime/1.0.0: + dev: true + resolution: + integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + /browserify-aes/1.2.0: + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.4 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + resolution: + integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + /browserify-cipher/1.0.1: + dependencies: + browserify-aes: 1.2.0 + browserify-des: 1.0.2 + evp_bytestokey: 1.0.3 + dev: true + resolution: + integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + /browserify-des/1.0.2: + dependencies: + cipher-base: 1.0.4 + des.js: 1.0.1 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + resolution: + integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + /browserify-rsa/4.1.0: + dependencies: + bn.js: 5.2.0 + randombytes: 2.1.0 + dev: true + resolution: + integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + /browserify-sign/4.2.1: + dependencies: + bn.js: 5.2.0 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + create-hmac: 1.1.7 + elliptic: 6.5.4 + inherits: 2.0.4 + parse-asn1: 5.1.6 + readable-stream: 3.6.0 + safe-buffer: 5.2.1 + dev: true + resolution: + integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + /browserify-zlib/0.2.0: + dependencies: + pako: 1.0.11 + dev: true + resolution: + integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + /browserslist/4.14.2: + dependencies: + caniuse-lite: 1.0.30001200 + electron-to-chromium: 1.3.687 + escalade: 3.1.1 + node-releases: 1.1.71 + dev: true + engines: + node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 + hasBin: true + resolution: + integrity: sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw== + /browserslist/4.16.3: + dependencies: + caniuse-lite: 1.0.30001200 + colorette: 1.2.2 + electron-to-chromium: 1.3.687 + escalade: 3.1.1 + node-releases: 1.1.71 + dev: true + engines: + node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 + hasBin: true + resolution: + integrity: sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== + /bser/2.1.1: + dependencies: + node-int64: 0.4.0 + dev: true + resolution: + integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + /buffer-from/1.1.1: + dev: true + resolution: + integrity: sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + /buffer-indexof/1.1.1: + dev: true + resolution: + integrity: sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + /buffer-xor/1.0.3: + dev: true + resolution: + integrity: sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + /buffer/4.9.2: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + isarray: 1.0.0 + dev: true + resolution: + integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + /builtin-modules/3.2.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== + /builtin-status-codes/3.0.0: + dev: true + resolution: + integrity: sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + /bytes/3.0.0: + dev: true + engines: + node: '>= 0.8' + resolution: + integrity: sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + /bytes/3.1.0: + dev: true + engines: + node: '>= 0.8' + resolution: + integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + /cacache/12.0.4: + dependencies: + bluebird: 3.7.2 + chownr: 1.1.4 + figgy-pudding: 3.5.2 + glob: 7.1.6 + graceful-fs: 4.2.6 + infer-owner: 1.0.4 + lru-cache: 5.1.1 + mississippi: 3.0.0 + mkdirp: 0.5.5 + move-concurrently: 1.0.1 + promise-inflight: 1.0.1 + rimraf: 2.7.1 + ssri: 6.0.1 + unique-filename: 1.1.1 + y18n: 4.0.1 + dev: true + resolution: + integrity: sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + /cacache/15.0.5: + dependencies: + '@npmcli/move-file': 1.1.2 + chownr: 2.0.0 + fs-minipass: 2.1.0 + glob: 7.1.6 + infer-owner: 1.0.4 + lru-cache: 6.0.0 + minipass: 3.1.3 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + mkdirp: 1.0.4 + p-map: 4.0.0 + promise-inflight: 1.0.1 + rimraf: 3.0.2 + ssri: 8.0.1 + tar: 6.1.0 + unique-filename: 1.1.1 + dev: true + engines: + node: '>= 10' + resolution: + integrity: sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== + /cache-base/1.0.1: + dependencies: + collection-visit: 1.0.0 + component-emitter: 1.3.0 + get-value: 2.0.6 + has-value: 1.0.0 + isobject: 3.0.1 + set-value: 2.0.1 + to-object-path: 0.3.0 + union-value: 1.0.1 + unset-value: 1.0.0 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + /call-bind/1.0.2: + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.1.1 + resolution: + integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + /caller-callsite/2.0.0: + dependencies: + callsites: 2.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + /caller-path/2.0.0: + dependencies: + caller-callsite: 2.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + /callsites/2.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + /callsites/3.1.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + /camel-case/4.1.2: + dependencies: + pascal-case: 3.1.2 + tslib: 2.1.0 + dev: true + resolution: + integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + /camelcase/5.3.1: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + /camelcase/6.2.0: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + /caniuse-api/3.0.0: + dependencies: + browserslist: 4.16.3 + caniuse-lite: 1.0.30001200 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + dev: true + resolution: + integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + /caniuse-lite/1.0.30001200: + dev: true + resolution: + integrity: sha512-ic/jXfa6tgiPBAISWk16jRI2q8YfjxHnSG7ddSL1ptrIP8Uy11SayFrjXRAk3NumHpDb21fdTkbTxb/hOrFrnQ== + /capture-exit/2.0.0: + dependencies: + rsvp: 4.8.5 + dev: true + engines: + node: 6.* || 8.* || >= 10.* + resolution: + integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + /case-sensitive-paths-webpack-plugin/2.3.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ== + /caseless/0.12.0: + dev: true + resolution: + integrity: sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + /chalk/1.1.3: + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + /chalk/2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + engines: + node: '>=4' + resolution: + integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + /chalk/3.0.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: false + engines: + node: '>=8' + resolution: + integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + /chalk/4.1.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + engines: + node: '>=10' + resolution: + integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + /char-regex/1.0.2: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + /chart.js/2.9.4: + dependencies: + chartjs-color: 2.4.1 + moment: 2.29.1 + dev: false + resolution: + integrity: sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A== + /chartjs-color-string/0.6.0: + dependencies: + color-name: 1.1.4 + dev: false + resolution: + integrity: sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A== + /chartjs-color/2.4.1: + dependencies: + chartjs-color-string: 0.6.0 + color-convert: 1.9.3 + dev: false + resolution: + integrity: sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w== + /check-types/11.1.2: + dev: true + resolution: + integrity: sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ== + /chnl/1.2.0: + dev: false + resolution: + integrity: sha512-g5gJb59edwCliFbX2j7G6sBfY4sX9YLy211yctONI2GRaiX0f2zIbKWmBm+sPqFNEpM7Ljzm7IJX/xrjiEbPrw== + /chokidar/2.1.8: + dependencies: + anymatch: 2.0.0 + async-each: 1.0.3 + braces: 2.3.2 + glob-parent: 3.1.0 + inherits: 2.0.4 + is-binary-path: 1.0.1 + is-glob: 4.0.1 + normalize-path: 3.0.0 + path-is-absolute: 1.0.1 + readdirp: 2.2.1 + upath: 1.2.0 + deprecated: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies. + dev: true + optionalDependencies: + fsevents: 1.2.13 + resolution: + integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + /chokidar/3.5.1: + dependencies: + anymatch: 3.1.1 + 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.5.0 + dev: true + engines: + node: '>= 8.10.0' + optional: true + optionalDependencies: + fsevents: 2.3.2 + resolution: + integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + /chownr/1.1.4: + dev: true + resolution: + integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + /chownr/2.0.0: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + /chrome-trace-event/1.0.2: + dependencies: + tslib: 1.14.1 + dev: true + engines: + node: '>=6.0' + resolution: + integrity: sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + /ci-info/2.0.0: + dev: true + resolution: + integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + /ci-info/3.1.1: + dev: true + resolution: + integrity: sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ== + /cipher-base/1.0.4: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + resolution: + integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + /cjs-module-lexer/0.6.0: + dev: true + resolution: + integrity: sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== + /class-utils/0.3.6: + dependencies: + arr-union: 3.1.0 + define-property: 0.2.5 + isobject: 3.0.1 + static-extend: 0.1.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + /classnames/2.2.6: + dev: false + resolution: + integrity: sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== + /clean-css/4.2.3: + dependencies: + source-map: 0.6.1 + dev: true + engines: + node: '>= 4.0' + resolution: + integrity: sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + /clean-stack/2.2.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + /cliui/5.0.0: + dependencies: + string-width: 3.1.0 + strip-ansi: 5.2.0 + wrap-ansi: 5.1.0 + dev: true + resolution: + integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + /cliui/6.0.0: + dependencies: + string-width: 4.2.2 + strip-ansi: 6.0.0 + wrap-ansi: 6.2.0 + dev: true + resolution: + integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + /co/4.6.0: + dev: true + engines: + iojs: '>= 1.0.0' + node: '>= 0.12.0' + resolution: + integrity: sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + /coa/2.0.2: + dependencies: + '@types/q': 1.5.4 + chalk: 2.4.2 + q: 1.5.1 + dev: true + engines: + node: '>= 4.0' + resolution: + integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + /collect-v8-coverage/1.0.1: + dev: true + resolution: + integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + /collection-visit/1.0.0: + dependencies: + map-visit: 1.0.0 + object-visit: 1.0.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + /color-convert/1.9.3: + dependencies: + color-name: 1.1.3 + resolution: + integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + /color-convert/2.0.1: + dependencies: + color-name: 1.1.4 + engines: + node: '>=7.0.0' + resolution: + integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + /color-name/1.1.3: + resolution: + integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + /color-name/1.1.4: + resolution: + integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + /color-string/1.5.5: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + dev: true + resolution: + integrity: sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg== + /color/3.1.3: + dependencies: + color-convert: 1.9.3 + color-string: 1.5.5 + dev: true + resolution: + integrity: sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== + /colorette/1.2.2: + dev: true + resolution: + integrity: sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + /combined-stream/1.0.8: + dependencies: + delayed-stream: 1.0.0 + dev: true + engines: + node: '>= 0.8' + resolution: + integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + /commander/2.20.3: + dev: true + resolution: + integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + /commander/4.1.1: + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + /commander/6.2.1: + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== + /common-tags/1.8.0: + dev: true + engines: + node: '>=4.0.0' + resolution: + integrity: sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== + /commondir/1.0.1: + dev: true + resolution: + integrity: sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + /component-emitter/1.3.0: + dev: true + resolution: + integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + /compose-function/3.0.3: + dependencies: + arity-n: 1.0.4 + dev: true + resolution: + integrity: sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8= + /compressible/2.0.18: + dependencies: + mime-db: 1.46.0 + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + /compression/1.7.4: + dependencies: + accepts: 1.3.7 + bytes: 3.0.0 + compressible: 2.0.18 + debug: 2.6.9 + on-headers: 1.0.2 + safe-buffer: 5.1.2 + vary: 1.1.2 + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + /compute-scroll-into-view/1.0.17: + dev: false + resolution: + integrity: sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg== + /concat-map/0.0.1: + dev: true + resolution: + integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + /concat-stream/1.6.2: + dependencies: + buffer-from: 1.1.1 + inherits: 2.0.4 + readable-stream: 2.3.7 + typedarray: 0.0.6 + dev: true + engines: + '0': node >= 0.8 + resolution: + integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + /confusing-browser-globals/1.0.10: + dev: true + resolution: + integrity: sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA== + /connect-history-api-fallback/1.6.0: + dev: true + engines: + node: '>=0.8' + resolution: + integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + /consola/2.15.3: + dev: true + resolution: + integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== + /console-browserify/1.2.0: + dev: true + resolution: + integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + /constants-browserify/1.0.0: + dev: true + resolution: + integrity: sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + /contains-path/0.1.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + /content-disposition/0.5.3: + dependencies: + safe-buffer: 5.1.2 + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + /content-type/1.0.4: + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + /convert-source-map/0.3.5: + dev: true + resolution: + integrity: sha1-8dgClQr33SYxof6+BZZVDIarMZA= + /convert-source-map/1.7.0: + dependencies: + safe-buffer: 5.1.2 + dev: true + resolution: + integrity: sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + /cookie-signature/1.0.6: + dev: true + resolution: + integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + /cookie/0.4.0: + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + /copy-anything/2.0.3: + dependencies: + is-what: 3.14.1 + dev: true + resolution: + integrity: sha512-GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ== + /copy-concurrently/1.0.5: + dependencies: + aproba: 1.2.0 + fs-write-stream-atomic: 1.0.10 + iferr: 0.1.5 + mkdirp: 0.5.5 + rimraf: 2.7.1 + run-queue: 1.0.3 + dev: true + resolution: + integrity: sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + /copy-descriptor/0.1.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + /copy-to-clipboard/3.3.1: + dependencies: + toggle-selection: 1.0.6 + dev: false + resolution: + integrity: sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw== + /core-js-compat/3.9.1: + dependencies: + browserslist: 4.16.3 + semver: 7.0.0 + dev: true + resolution: + integrity: sha512-jXAirMQxrkbiiLsCx9bQPJFA6llDadKMpYrBJQJ3/c4/vsPP/fAf29h24tviRlvwUL6AmY5CHLu2GvjuYviQqA== + /core-js-pure/3.9.1: + requiresBuild: true + resolution: + integrity: sha512-laz3Zx0avrw9a4QEIdmIblnVuJz8W51leY9iLThatCsFawWxC3sE4guASC78JbCin+DkwMpCdp1AVAuzL/GN7A== + /core-js/2.6.12: + deprecated: core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3. + dev: true + requiresBuild: true + resolution: + integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + /core-js/3.9.1: + dev: true + requiresBuild: true + resolution: + integrity: sha512-gSjRvzkxQc1zjM/5paAmL4idJBFzuJoo+jDjF1tStYFMV2ERfD02HhahhCGXUyHxQRG4yFKVSdO6g62eoRMcDg== + /core-util-is/1.0.2: + dev: true + resolution: + integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + /cosmiconfig/5.2.1: + dependencies: + import-fresh: 2.0.0 + is-directory: 0.3.1 + js-yaml: 3.14.1 + parse-json: 4.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + /cosmiconfig/6.0.0: + dependencies: + '@types/parse-json': 4.0.0 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + /cosmiconfig/7.0.0: + dependencies: + '@types/parse-json': 4.0.0 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== + /craco-alias/2.2.0: + dev: true + resolution: + integrity: sha512-FLSRaCWI/CKLUO+Cb/GH9ljSYWdrlzkYf3N373Kuof0hckJ1tj+wPN0XyToR8KPUggoIB5+IDkGs1uKUBuGUiA== + /create-ecdh/4.0.4: + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.4 + dev: true + resolution: + integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + /create-hash/1.2.0: + dependencies: + cipher-base: 1.0.4 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + dev: true + resolution: + integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + /create-hmac/1.1.7: + dependencies: + cipher-base: 1.0.4 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: true + resolution: + integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + /cross-spawn/6.0.5: + dependencies: + nice-try: 1.0.5 + path-key: 2.0.1 + semver: 5.7.1 + shebang-command: 1.2.0 + which: 1.3.1 + dev: true + engines: + node: '>=4.8' + resolution: + integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + /cross-spawn/7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + /crypto-browserify/3.12.0: + dependencies: + browserify-cipher: 1.0.1 + browserify-sign: 4.2.1 + create-ecdh: 4.0.4 + create-hash: 1.2.0 + create-hmac: 1.1.7 + diffie-hellman: 5.0.3 + inherits: 2.0.4 + pbkdf2: 3.1.1 + public-encrypt: 4.0.3 + randombytes: 2.1.0 + randomfill: 1.0.4 + dev: true + resolution: + integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + /crypto-random-string/1.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= + /css-blank-pseudo/0.1.4: + dependencies: + postcss: 7.0.35 + dev: true + engines: + node: '>=6.0.0' + hasBin: true + resolution: + integrity: sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w== + /css-color-names/0.0.4: + dev: true + resolution: + integrity: sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + /css-declaration-sorter/4.0.1: + dependencies: + postcss: 7.0.35 + timsort: 0.3.0 + dev: true + engines: + node: '>4' + resolution: + integrity: sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + /css-has-pseudo/0.10.0: + dependencies: + postcss: 7.0.35 + postcss-selector-parser: 5.0.0 + dev: true + engines: + node: '>=6.0.0' + hasBin: true + resolution: + integrity: sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ== + /css-loader/4.3.0_webpack@4.44.2: + dependencies: + camelcase: 6.2.0 + cssesc: 3.0.0 + icss-utils: 4.1.1 + loader-utils: 2.0.0 + postcss: 7.0.35 + postcss-modules-extract-imports: 2.0.0 + postcss-modules-local-by-default: 3.0.3 + postcss-modules-scope: 2.2.0 + postcss-modules-values: 3.0.0 + postcss-value-parser: 4.1.0 + schema-utils: 2.7.1 + semver: 7.3.4 + webpack: 4.44.2 + dev: true + engines: + node: '>= 10.13.0' + peerDependencies: + webpack: ^4.27.0 || ^5.0.0 + resolution: + integrity: sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg== + /css-prefers-color-scheme/3.1.1: + dependencies: + postcss: 7.0.35 + dev: true + engines: + node: '>=6.0.0' + hasBin: true + resolution: + integrity: sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg== + /css-select-base-adapter/0.1.1: + dev: true + resolution: + integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + /css-select/2.1.0: + dependencies: + boolbase: 1.0.0 + css-what: 3.4.2 + domutils: 1.7.0 + nth-check: 1.0.2 + dev: true + resolution: + integrity: sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + /css-tree/1.0.0-alpha.37: + dependencies: + mdn-data: 2.0.4 + source-map: 0.6.1 + dev: true + engines: + node: '>=8.0.0' + resolution: + integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + /css-tree/1.1.2: + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + dev: true + engines: + node: '>=8.0.0' + resolution: + integrity: sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ== + /css-what/3.4.2: + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== + /css.escape/1.5.1: + dev: false + resolution: + integrity: sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= + /css/2.2.4: + dependencies: + inherits: 2.0.4 + source-map: 0.6.1 + source-map-resolve: 0.5.3 + urix: 0.1.0 + dev: true + resolution: + integrity: sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== + /css/3.0.0: + dependencies: + inherits: 2.0.4 + source-map: 0.6.1 + source-map-resolve: 0.6.0 + dev: false + resolution: + integrity: sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== + /cssdb/4.4.0: + dev: true + resolution: + integrity: sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ== + /cssesc/2.0.0: + dev: true + engines: + node: '>=4' + hasBin: true + resolution: + integrity: sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== + /cssesc/3.0.0: + dev: true + engines: + node: '>=4' + hasBin: true + resolution: + integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + /cssnano-preset-default/4.0.7: + dependencies: + css-declaration-sorter: 4.0.1 + cssnano-util-raw-cache: 4.0.1 + postcss: 7.0.35 + postcss-calc: 7.0.5 + postcss-colormin: 4.0.3 + postcss-convert-values: 4.0.1 + postcss-discard-comments: 4.0.2 + postcss-discard-duplicates: 4.0.2 + postcss-discard-empty: 4.0.1 + postcss-discard-overridden: 4.0.1 + postcss-merge-longhand: 4.0.11 + postcss-merge-rules: 4.0.3 + postcss-minify-font-values: 4.0.2 + postcss-minify-gradients: 4.0.2 + postcss-minify-params: 4.0.2 + postcss-minify-selectors: 4.0.2 + postcss-normalize-charset: 4.0.1 + postcss-normalize-display-values: 4.0.2 + postcss-normalize-positions: 4.0.2 + postcss-normalize-repeat-style: 4.0.2 + postcss-normalize-string: 4.0.2 + postcss-normalize-timing-functions: 4.0.2 + postcss-normalize-unicode: 4.0.1 + postcss-normalize-url: 4.0.1 + postcss-normalize-whitespace: 4.0.2 + postcss-ordered-values: 4.1.2 + postcss-reduce-initial: 4.0.3 + postcss-reduce-transforms: 4.0.2 + postcss-svgo: 4.0.2 + postcss-unique-selectors: 4.0.1 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== + /cssnano-util-get-arguments/4.0.0: + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + /cssnano-util-get-match/4.0.0: + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + /cssnano-util-raw-cache/4.0.1: + dependencies: + postcss: 7.0.35 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + /cssnano-util-same-parent/4.0.1: + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + /cssnano/4.1.10: + dependencies: + cosmiconfig: 5.2.1 + cssnano-preset-default: 4.0.7 + is-resolvable: 1.1.0 + postcss: 7.0.35 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== + /csso/4.2.0: + dependencies: + css-tree: 1.1.2 + dev: true + engines: + node: '>=8.0.0' + resolution: + integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + /cssom/0.3.8: + dev: true + resolution: + integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + /cssom/0.4.4: + dev: true + resolution: + integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + /cssstyle/2.3.0: + dependencies: + cssom: 0.3.8 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + /csstype/3.0.7: + dev: true + resolution: + integrity: sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g== + /csv-stringify/5.6.2: + dev: false + resolution: + integrity: sha512-n3rIVbX6ylm1YsX2NEug9IaPV8xRnT+9/NNZbrA/bcHgOSSeqtWla6XnI/xmyu57wIw+ASCAoX1oM6EZtqJV0A== + /cyclist/1.0.1: + dev: true + resolution: + integrity: sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + /d/1.0.1: + dependencies: + es5-ext: 0.10.53 + type: 1.2.0 + dev: true + resolution: + integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + /damerau-levenshtein/1.0.6: + dev: true + resolution: + integrity: sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug== + /dashdash/1.14.1: + dependencies: + assert-plus: 1.0.0 + dev: true + engines: + node: '>=0.10' + resolution: + integrity: sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + /data-urls/2.0.0: + dependencies: + abab: 2.0.5 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.4.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + /date-fns/2.19.0: + dev: false + engines: + node: '>=0.11' + resolution: + integrity: sha512-X3bf2iTPgCAQp9wvjOQytnf5vO5rESYRXlPIVcgSbtT5OTScPcsf9eZU+B/YIkKAtYr5WeCii58BgATrNitlWg== + /dayjs/1.10.4: + dev: false + resolution: + integrity: sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw== + /debug/2.6.9: + dependencies: + ms: 2.0.0 + dev: true + resolution: + integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + /debug/3.2.7: + dependencies: + ms: 2.1.3 + dev: true + resolution: + integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + /debug/4.3.1: + dependencies: + ms: 2.1.2 + engines: + node: '>=6.0' + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + resolution: + integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + /debug/4.3.1_supports-color@6.1.0: + dependencies: + ms: 2.1.2 + supports-color: 6.1.0 + dev: true + engines: + node: '>=6.0' + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + resolution: + integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + /decamelize/1.2.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + /decimal.js/10.2.1: + dev: true + resolution: + integrity: sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== + /decode-uri-component/0.2.0: + engines: + node: '>=0.10' + resolution: + integrity: sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + /dedent/0.7.0: + dev: true + resolution: + integrity: sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + /deep-equal/1.1.1: + dependencies: + is-arguments: 1.1.0 + is-date-object: 1.0.2 + is-regex: 1.1.2 + object-is: 1.1.5 + object-keys: 1.1.1 + regexp.prototype.flags: 1.3.1 + dev: true + resolution: + integrity: sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + /deep-is/0.1.3: + dev: true + resolution: + integrity: sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + /deepmerge/4.2.2: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + /default-gateway/4.2.0: + dependencies: + execa: 1.0.0 + ip-regex: 2.1.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + /define-properties/1.1.3: + dependencies: + object-keys: 1.1.1 + engines: + node: '>= 0.4' + resolution: + integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + /define-property/0.2.5: + dependencies: + is-descriptor: 0.1.6 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + /define-property/1.0.0: + dependencies: + is-descriptor: 1.0.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + /define-property/2.0.2: + dependencies: + is-descriptor: 1.0.2 + isobject: 3.0.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + /del/4.1.1: + dependencies: + '@types/glob': 7.1.3 + globby: 6.1.0 + is-path-cwd: 2.2.0 + is-path-in-cwd: 2.1.0 + p-map: 2.1.0 + pify: 4.0.1 + rimraf: 2.7.1 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + /delayed-stream/1.0.0: + dev: true + engines: + node: '>=0.4.0' + resolution: + integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + /depd/1.1.2: + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + /des.js/1.0.1: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: true + resolution: + integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + /destroy/1.0.4: + dev: true + resolution: + integrity: sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + /detect-newline/3.1.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + /detect-node/2.0.4: + dev: true + resolution: + integrity: sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + /detect-port-alt/1.1.6: + dependencies: + address: 1.1.2 + debug: 2.6.9 + dev: true + engines: + node: '>= 4.2.1' + hasBin: true + resolution: + integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== + /diff-sequences/26.6.2: + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== + /diffie-hellman/5.0.3: + dependencies: + bn.js: 4.12.0 + miller-rabin: 4.0.1 + randombytes: 2.1.0 + dev: true + resolution: + integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + /dir-glob/3.0.1: + dependencies: + path-type: 4.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + /dns-equal/1.0.0: + dev: true + resolution: + integrity: sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + /dns-packet/1.3.1: + dependencies: + ip: 1.1.5 + safe-buffer: 5.2.1 + dev: true + resolution: + integrity: sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + /dns-txt/2.0.2: + dependencies: + buffer-indexof: 1.1.1 + dev: true + resolution: + integrity: sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + /doctrine/1.5.0: + dependencies: + esutils: 2.0.3 + isarray: 1.0.0 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + /doctrine/2.1.0: + dependencies: + esutils: 2.0.3 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + /doctrine/3.0.0: + dependencies: + esutils: 2.0.3 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + /dom-accessibility-api/0.5.4: + dev: false + resolution: + integrity: sha512-TvrjBckDy2c6v6RLxPv5QXOnU+SmF9nBII5621Ve5fu6Z/BDrENurBEvlC1f44lKEUVqOpK4w9E5Idc5/EgkLQ== + /dom-align/1.12.0: + dev: false + resolution: + integrity: sha512-YkoezQuhp3SLFGdOlr5xkqZ640iXrnHAwVYcDg8ZKRUtO7mSzSC2BA5V0VuyAwPSJA4CLIc6EDDJh4bEsD2+zA== + /dom-converter/0.2.0: + dependencies: + utila: 0.4.0 + dev: true + resolution: + integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + /dom-serializer/0.2.2: + dependencies: + domelementtype: 2.1.0 + entities: 2.2.0 + dev: true + resolution: + integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + /domain-browser/1.2.0: + dev: true + engines: + node: '>=0.4' + npm: '>=1.2' + resolution: + integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + /domelementtype/1.3.1: + dev: true + resolution: + integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + /domelementtype/2.1.0: + dev: true + resolution: + integrity: sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== + /domexception/2.0.1: + dependencies: + webidl-conversions: 5.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + /domhandler/2.4.2: + dependencies: + domelementtype: 1.3.1 + dev: true + resolution: + integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + /domutils/1.7.0: + dependencies: + dom-serializer: 0.2.2 + domelementtype: 1.3.1 + dev: true + resolution: + integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + /dot-case/3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.1.0 + dev: true + resolution: + integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + /dot-prop/5.3.0: + dependencies: + is-obj: 2.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + /dotenv-expand/5.1.0: + dev: true + resolution: + integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + /dotenv/8.2.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + /duplexer/0.1.2: + dev: true + resolution: + integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + /duplexify/3.7.1: + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 2.3.7 + stream-shift: 1.0.1 + dev: true + resolution: + integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + /ecc-jsbn/0.1.2: + dependencies: + jsbn: 0.1.1 + safer-buffer: 2.1.2 + dev: true + resolution: + integrity: sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + /ee-first/1.1.1: + dev: true + resolution: + integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + /ejs/2.7.4: + dev: true + engines: + node: '>=0.10.0' + requiresBuild: true + resolution: + integrity: sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== + /electron-to-chromium/1.3.687: + dev: true + resolution: + integrity: sha512-IpzksdQNl3wdgkzf7dnA7/v10w0Utf1dF2L+B4+gKrloBrxCut+au+kky3PYvle3RMdSxZP+UiCZtLbcYRxSNQ== + /elliptic/6.5.4: + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: true + resolution: + integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + /emittery/0.7.2: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== + /emoji-regex/7.0.3: + dev: true + resolution: + integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + /emoji-regex/8.0.0: + dev: true + resolution: + integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + /emoji-regex/9.2.2: + dev: true + resolution: + integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + /emojis-list/2.1.0: + dev: true + engines: + node: '>= 0.10' + resolution: + integrity: sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + /emojis-list/3.0.0: + dev: true + engines: + node: '>= 4' + resolution: + integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + /encodeurl/1.0.2: + dev: true + engines: + node: '>= 0.8' + resolution: + integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + /end-of-stream/1.4.4: + dependencies: + once: 1.4.0 + dev: true + resolution: + integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + /enhanced-resolve/4.5.0: + dependencies: + graceful-fs: 4.2.6 + memory-fs: 0.5.0 + tapable: 1.1.3 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== + /enquirer/2.3.6: + dependencies: + ansi-colors: 4.1.1 + dev: true + engines: + node: '>=8.6' + resolution: + integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + /entities/1.1.2: + dev: true + resolution: + integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + /entities/2.2.0: + dev: true + resolution: + integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + /errno/0.1.8: + dependencies: + prr: 1.0.1 + dev: true + hasBin: true + resolution: + integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + /error-ex/1.3.2: + dependencies: + is-arrayish: 0.2.1 + dev: true + resolution: + integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + /error-stack-parser/2.0.6: + dependencies: + stackframe: 1.2.0 + dev: true + resolution: + integrity: sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== + /es-abstract/1.18.0: + dependencies: + call-bind: 1.0.2 + es-to-primitive: 1.2.1 + function-bind: 1.1.1 + get-intrinsic: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.2 + is-callable: 1.2.3 + is-negative-zero: 2.0.1 + is-regex: 1.1.2 + is-string: 1.0.5 + object-inspect: 1.9.0 + object-keys: 1.1.1 + object.assign: 4.1.2 + string.prototype.trimend: 1.0.4 + string.prototype.trimstart: 1.0.4 + unbox-primitive: 1.0.0 + engines: + node: '>= 0.4' + resolution: + integrity: sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== + /es-to-primitive/1.2.1: + dependencies: + is-callable: 1.2.3 + is-date-object: 1.0.2 + is-symbol: 1.0.3 + engines: + node: '>= 0.4' + resolution: + integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + /es5-ext/0.10.53: + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.3 + next-tick: 1.0.0 + dev: true + resolution: + integrity: sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + /es6-iterator/2.0.3: + dependencies: + d: 1.0.1 + es5-ext: 0.10.53 + es6-symbol: 3.1.3 + dev: true + resolution: + integrity: sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + /es6-symbol/3.1.3: + dependencies: + d: 1.0.1 + ext: 1.4.0 + dev: true + resolution: + integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + /escalade/3.1.1: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + /escape-html/1.0.3: + dev: true + resolution: + integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + /escape-string-regexp/1.0.5: + engines: + node: '>=0.8.0' + resolution: + integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + /escape-string-regexp/2.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + /escodegen/2.0.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.2.0 + esutils: 2.0.3 + optionator: 0.8.3 + dev: true + engines: + node: '>=6.0' + hasBin: true + optionalDependencies: + source-map: 0.6.1 + resolution: + integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + /eslint-config-react-app/6.0.0_5bfa359da3fb2923202453652d4fbef5: + dependencies: + '@typescript-eslint/eslint-plugin': 4.17.0_5999a92f4ea517bc2e240e03c336061d + '@typescript-eslint/parser': 4.17.0_eslint@7.22.0+typescript@4.1.5 + babel-eslint: 10.1.0_eslint@7.22.0 + confusing-browser-globals: 1.0.10 + eslint: 7.22.0 + eslint-plugin-flowtype: 5.4.0_eslint@7.22.0 + eslint-plugin-import: 2.22.1_eslint@7.22.0 + eslint-plugin-jest: 24.3.1_fd944d5523a3c56434442ccecc6343c4 + eslint-plugin-jsx-a11y: 6.4.1_eslint@7.22.0 + eslint-plugin-react: 7.22.0_eslint@7.22.0 + eslint-plugin-react-hooks: 4.2.0_eslint@7.22.0 + eslint-plugin-testing-library: 3.10.1_eslint@7.22.0+typescript@4.1.5 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + peerDependencies: + '@typescript-eslint/eslint-plugin': ^4.0.0 + '@typescript-eslint/parser': ^4.0.0 + babel-eslint: ^10.0.0 + eslint: ^7.5.0 + eslint-plugin-flowtype: ^5.2.0 + eslint-plugin-import: ^2.22.0 + eslint-plugin-jest: ^24.0.0 + eslint-plugin-jsx-a11y: ^6.3.1 + eslint-plugin-react: ^7.20.3 + eslint-plugin-react-hooks: ^4.0.8 + eslint-plugin-testing-library: ^3.9.0 + peerDependenciesMeta: + eslint-plugin-jest: + optional: true + eslint-plugin-testing-library: + optional: true + resolution: + integrity: sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A== + /eslint-import-resolver-node/0.3.4: + dependencies: + debug: 2.6.9 + resolve: 1.18.1 + dev: true + resolution: + integrity: sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== + /eslint-module-utils/2.6.0: + dependencies: + debug: 2.6.9 + pkg-dir: 2.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== + /eslint-plugin-flowtype/5.4.0_eslint@7.22.0: + dependencies: + eslint: 7.22.0 + lodash: 4.17.21 + string-natural-compare: 3.0.1 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + peerDependencies: + eslint: ^7.1.0 + resolution: + integrity: sha512-O0s0iTT5UxYuoOpHMLSIO2qZMyvrb9shhk1EM5INNGtJ2CffrfUmsnh6TVsnoT41fkXIEndP630WNovhoO87xQ== + /eslint-plugin-import/2.22.1_eslint@7.22.0: + dependencies: + array-includes: 3.1.3 + array.prototype.flat: 1.2.4 + contains-path: 0.1.0 + debug: 2.6.9 + doctrine: 1.5.0 + eslint: 7.22.0 + eslint-import-resolver-node: 0.3.4 + eslint-module-utils: 2.6.0 + has: 1.0.3 + minimatch: 3.0.4 + object.values: 1.1.3 + read-pkg-up: 2.0.0 + resolve: 1.18.1 + tsconfig-paths: 3.9.0 + dev: true + engines: + node: '>=4' + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 + resolution: + integrity: sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== + /eslint-plugin-jest/24.3.1_fd944d5523a3c56434442ccecc6343c4: + dependencies: + '@typescript-eslint/eslint-plugin': 4.17.0_5999a92f4ea517bc2e240e03c336061d + '@typescript-eslint/experimental-utils': 4.17.0_eslint@7.22.0+typescript@4.1.5 + eslint: 7.22.0 + dev: true + engines: + node: '>=10' + peerDependencies: + '@typescript-eslint/eslint-plugin': '>= 4' + eslint: '>=5' + typescript: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + resolution: + integrity: sha512-RQt59rfMSHyvedImT72iaf8JcvCcR4P7Uq499dALtjY8mrCjbwWrFi1UceG4sid2wVIeDi+0tjxXZ8CZEVO7Zw== + /eslint-plugin-jsx-a11y/6.4.1_eslint@7.22.0: + dependencies: + '@babel/runtime': 7.13.10 + aria-query: 4.2.2 + array-includes: 3.1.3 + ast-types-flow: 0.0.7 + axe-core: 4.1.3 + axobject-query: 2.2.0 + damerau-levenshtein: 1.0.6 + emoji-regex: 9.2.2 + eslint: 7.22.0 + has: 1.0.3 + jsx-ast-utils: 3.2.0 + language-tags: 1.0.5 + dev: true + engines: + node: '>=4.0' + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 + resolution: + integrity: sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg== + /eslint-plugin-react-hooks/4.2.0_eslint@7.22.0: + dependencies: + eslint: 7.22.0 + dev: true + engines: + node: '>=10' + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + resolution: + integrity: sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ== + /eslint-plugin-react/7.22.0_eslint@7.22.0: + dependencies: + array-includes: 3.1.3 + array.prototype.flatmap: 1.2.4 + doctrine: 2.1.0 + eslint: 7.22.0 + has: 1.0.3 + jsx-ast-utils: 3.2.0 + object.entries: 1.1.3 + object.fromentries: 2.0.4 + object.values: 1.1.3 + prop-types: 15.7.2 + resolve: 1.20.0 + string.prototype.matchall: 4.0.4 + dev: true + engines: + node: '>=4' + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 + resolution: + integrity: sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA== + /eslint-plugin-testing-library/3.10.1_eslint@7.22.0+typescript@4.1.5: + dependencies: + '@typescript-eslint/experimental-utils': 3.10.1_eslint@7.22.0+typescript@4.1.5 + eslint: 7.22.0 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + npm: '>=6' + peerDependencies: + eslint: ^5 || ^6 || ^7 + typescript: '*' + resolution: + integrity: sha512-nQIFe2muIFv2oR2zIuXE4vTbcFNx8hZKRzgHZqJg8rfopIWwoTwtlbCCNELT/jXzVe1uZF68ALGYoDXjLczKiQ== + /eslint-plugin-tsdoc/0.2.11: + dependencies: + '@microsoft/tsdoc': 0.13.0 + '@microsoft/tsdoc-config': 0.14.0 + dev: true + resolution: + integrity: sha512-vEjGANpmBfrvpKj9rwePGhA+gIe1mp+dhDZsrkxlHqPVOZvzVdFSV9fxu/o3eppmxhybI8brD88jOrLEAIB9Gw== + /eslint-scope/4.0.3: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + engines: + node: '>=4.0.0' + resolution: + integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + /eslint-scope/5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + engines: + node: '>=8.0.0' + resolution: + integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + /eslint-utils/2.1.0: + dependencies: + eslint-visitor-keys: 1.3.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + /eslint-visitor-keys/1.3.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + /eslint-visitor-keys/2.0.0: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + /eslint-webpack-plugin/2.5.2_eslint@7.22.0+webpack@4.44.2: + dependencies: + '@types/eslint': 7.2.7 + arrify: 2.0.1 + eslint: 7.22.0 + jest-worker: 26.6.2 + micromatch: 4.0.2 + schema-utils: 3.0.0 + webpack: 4.44.2 + dev: true + engines: + node: '>= 10.13.0' + peerDependencies: + eslint: ^7.0.0 + webpack: ^4.0.0 || ^5.0.0 + resolution: + integrity: sha512-ndD9chZ/kaGnjjx7taRg7c6FK/YKb29SSYzaLtPBIYLYJQmZtuKqtQbAvTS2ymiMQT6X0VW9vZIHK0KLstv93Q== + /eslint/7.22.0: + dependencies: + '@babel/code-frame': 7.12.11 + '@eslint/eslintrc': 0.4.0 + ajv: 6.12.6 + chalk: 4.1.0 + cross-spawn: 7.0.3 + debug: 4.3.1 + doctrine: 3.0.0 + enquirer: 2.3.6 + eslint-scope: 5.1.1 + eslint-utils: 2.1.0 + eslint-visitor-keys: 2.0.0 + espree: 7.3.1 + esquery: 1.4.0 + esutils: 2.0.3 + file-entry-cache: 6.0.1 + functional-red-black-tree: 1.0.1 + glob-parent: 5.1.2 + globals: 13.6.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.1 + js-yaml: 3.14.1 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash: 4.17.21 + minimatch: 3.0.4 + natural-compare: 1.4.0 + optionator: 0.9.1 + progress: 2.0.3 + regexpp: 3.1.0 + semver: 7.3.4 + strip-ansi: 6.0.0 + strip-json-comments: 3.1.1 + table: 6.0.7 + text-table: 0.2.0 + v8-compile-cache: 2.3.0 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + hasBin: true + resolution: + integrity: sha512-3VawOtjSJUQiiqac8MQc+w457iGLfuNGLFn8JmF051tTKbh5/x/0vlcEj8OgDCaw7Ysa2Jn8paGshV7x2abKXg== + /espree/7.3.1: + dependencies: + acorn: 7.4.1 + acorn-jsx: 5.3.1_acorn@7.4.1 + eslint-visitor-keys: 1.3.0 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + resolution: + integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + /esprima/4.0.1: + dev: true + engines: + node: '>=4' + hasBin: true + resolution: + integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + /esquery/1.4.0: + dependencies: + estraverse: 5.2.0 + dev: true + engines: + node: '>=0.10' + resolution: + integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + /esrecurse/4.3.0: + dependencies: + estraverse: 5.2.0 + dev: true + engines: + node: '>=4.0' + resolution: + integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + /estraverse/4.3.0: + dev: true + engines: + node: '>=4.0' + resolution: + integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + /estraverse/5.2.0: + dev: true + engines: + node: '>=4.0' + resolution: + integrity: sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + /estree-walker/0.6.1: + dev: true + resolution: + integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== + /estree-walker/1.0.1: + dev: true + resolution: + integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + /esutils/2.0.3: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + /etag/1.8.1: + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + /eventemitter3/4.0.7: + dev: true + resolution: + integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + /events/3.3.0: + dev: true + engines: + node: '>=0.8.x' + resolution: + integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + /eventsource/1.0.7: + dependencies: + original: 1.0.2 + dev: true + engines: + node: '>=0.12.0' + resolution: + integrity: sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + /evp_bytestokey/1.0.3: + dependencies: + md5.js: 1.3.5 + safe-buffer: 5.2.1 + dev: true + resolution: + integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + /exec-sh/0.3.4: + dev: true + resolution: + integrity: sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== + /execa/1.0.0: + dependencies: + cross-spawn: 6.0.5 + get-stream: 4.1.0 + is-stream: 1.1.0 + npm-run-path: 2.0.2 + p-finally: 1.0.0 + signal-exit: 3.0.3 + strip-eof: 1.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + /execa/4.1.0: + dependencies: + cross-spawn: 7.0.3 + get-stream: 5.2.0 + human-signals: 1.1.1 + 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 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + /exit/0.1.2: + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + /expand-brackets/2.1.4: + dependencies: + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + posix-character-classes: 0.1.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + /expect/26.6.2: + dependencies: + '@jest/types': 26.6.2 + ansi-styles: 4.3.0 + jest-get-type: 26.3.0 + jest-matcher-utils: 26.6.2 + jest-message-util: 26.6.2 + jest-regex-util: 26.0.0 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== + /express/4.17.1: + dependencies: + accepts: 1.3.7 + array-flatten: 1.1.1 + body-parser: 1.19.0 + content-disposition: 0.5.3 + content-type: 1.0.4 + cookie: 0.4.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 1.1.2 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.1.2 + fresh: 0.5.2 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.3.0 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.6 + qs: 6.7.0 + range-parser: 1.2.1 + safe-buffer: 5.1.2 + send: 0.17.1 + serve-static: 1.14.1 + setprototypeof: 1.1.1 + statuses: 1.5.0 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + dev: true + engines: + node: '>= 0.10.0' + resolution: + integrity: sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + /ext/1.4.0: + dependencies: + type: 2.5.0 + dev: true + resolution: + integrity: sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + /extend-shallow/2.0.1: + dependencies: + is-extendable: 0.1.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + /extend-shallow/3.0.2: + dependencies: + assign-symbols: 1.0.0 + is-extendable: 1.0.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + /extend/3.0.2: + dev: true + resolution: + integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + /extglob/2.0.4: + dependencies: + array-unique: 0.3.2 + define-property: 1.0.0 + expand-brackets: 2.1.4 + extend-shallow: 2.0.1 + fragment-cache: 0.2.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + /extsprintf/1.3.0: + dev: true + engines: + '0': node >=0.6.0 + resolution: + integrity: sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + /fast-deep-equal/3.1.3: + dev: true + resolution: + integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + /fast-glob/3.2.5: + dependencies: + '@nodelib/fs.stat': 2.0.4 + '@nodelib/fs.walk': 1.2.6 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.2 + picomatch: 2.2.2 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== + /fast-json-stable-stringify/2.1.0: + dev: true + resolution: + integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + /fast-levenshtein/2.0.6: + dev: true + resolution: + integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + /fastq/1.11.0: + dependencies: + reusify: 1.0.4 + dev: true + resolution: + integrity: sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== + /faye-websocket/0.11.3: + dependencies: + websocket-driver: 0.7.4 + dev: true + engines: + node: '>=0.8.0' + resolution: + integrity: sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + /fb-watchman/2.0.1: + dependencies: + bser: 2.1.1 + dev: true + resolution: + integrity: sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + /figgy-pudding/3.5.2: + dev: true + resolution: + integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + /figures/3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + /file-entry-cache/6.0.1: + dependencies: + flat-cache: 3.0.4 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + resolution: + integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + /file-loader/6.1.1_webpack@4.44.2: + dependencies: + loader-utils: 2.0.0 + schema-utils: 3.0.0 + webpack: 4.44.2 + dev: true + engines: + node: '>= 10.13.0' + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + resolution: + integrity: sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw== + /file-saver/2.0.5: + dev: false + resolution: + integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA== + /file-uri-to-path/1.0.0: + dev: true + optional: true + resolution: + integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + /filesize/6.1.0: + dev: true + engines: + node: '>= 0.4.0' + resolution: + integrity: sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg== + /fill-range/4.0.0: + dependencies: + extend-shallow: 2.0.1 + is-number: 3.0.0 + repeat-string: 1.6.1 + to-regex-range: 2.1.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + /fill-range/7.0.1: + dependencies: + to-regex-range: 5.0.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + /finalhandler/1.1.2: + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.3.0 + parseurl: 1.3.3 + statuses: 1.5.0 + unpipe: 1.0.0 + dev: true + engines: + node: '>= 0.8' + resolution: + integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + /find-cache-dir/2.1.0: + dependencies: + commondir: 1.0.1 + make-dir: 2.1.0 + pkg-dir: 3.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + /find-cache-dir/3.3.1: + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + /find-up/2.1.0: + dependencies: + locate-path: 2.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + /find-up/3.0.0: + dependencies: + locate-path: 3.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + /find-up/4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + /flat-cache/3.0.4: + dependencies: + flatted: 3.1.1 + rimraf: 3.0.2 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + resolution: + integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + /flatted/3.1.1: + dev: true + resolution: + integrity: sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== + /flatten/1.0.3: + dev: true + resolution: + integrity: sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== + /flush-write-stream/1.1.1: + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.7 + dev: true + resolution: + integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + /follow-redirects/1.13.3_debug@4.3.1: + dependencies: + debug: 4.3.1_supports-color@6.1.0 + dev: true + engines: + node: '>=4.0' + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + resolution: + integrity: sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA== + /for-in/1.0.2: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + /forever-agent/0.6.1: + dev: true + resolution: + integrity: sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + /fork-ts-checker-webpack-plugin/4.1.6: + dependencies: + '@babel/code-frame': 7.10.4 + chalk: 2.4.2 + micromatch: 3.1.10 + minimatch: 3.0.4 + semver: 5.7.1 + tapable: 1.1.3 + worker-rpc: 0.1.1 + dev: true + engines: + node: '>=6.11.5' + yarn: '>=1.0.0' + resolution: + integrity: sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw== + /form-data/2.3.3: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.29 + dev: true + engines: + node: '>= 0.12' + resolution: + integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + /forwarded/0.1.2: + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + /fragment-cache/0.2.1: + dependencies: + map-cache: 0.2.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + /fresh/0.5.2: + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + /from2/2.3.0: + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.7 + dev: true + resolution: + integrity: sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + /fs-extra/7.0.1: + dependencies: + graceful-fs: 4.2.6 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: true + engines: + node: '>=6 <7 || >=8' + resolution: + integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + /fs-extra/8.1.0: + dependencies: + graceful-fs: 4.2.6 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: true + engines: + node: '>=6 <7 || >=8' + resolution: + integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + /fs-extra/9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.6 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + /fs-minipass/2.1.0: + dependencies: + minipass: 3.1.3 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + /fs-write-stream-atomic/1.0.10: + dependencies: + graceful-fs: 4.2.6 + iferr: 0.1.5 + imurmurhash: 0.1.4 + readable-stream: 2.3.7 + dev: true + resolution: + integrity: sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + /fs.realpath/1.0.0: + dev: true + resolution: + integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + /fsevents/1.2.13: + dependencies: + bindings: 1.5.0 + nan: 2.14.2 + deprecated: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2. + dev: true + engines: + node: '>= 4.0' + optional: true + os: + - darwin + requiresBuild: true + resolution: + integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + /fsevents/2.3.2: + dev: true + engines: + node: ^8.16.0 || ^10.6.0 || >=11.0.0 + optional: true + os: + - darwin + resolution: + integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + /function-bind/1.1.1: + resolution: + integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + /functional-red-black-tree/1.0.1: + dev: true + resolution: + integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + /gensync/1.0.0-beta.2: + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + /get-caller-file/2.0.5: + dev: true + engines: + node: 6.* || 8.* || >= 10.* + resolution: + integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + /get-intrinsic/1.1.1: + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.2 + resolution: + integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + /get-own-enumerable-property-symbols/3.0.2: + dev: true + resolution: + integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + /get-package-type/0.1.0: + dev: true + engines: + node: '>=8.0.0' + resolution: + integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + /get-stream/4.1.0: + dependencies: + pump: 3.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + /get-stream/5.2.0: + dependencies: + pump: 3.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + /get-value/2.0.6: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + /getpass/0.1.7: + dependencies: + assert-plus: 1.0.0 + dev: true + resolution: + integrity: sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + /git-revision-webpack-plugin/3.0.6: + dev: true + engines: + node: '>=6.11.5' + resolution: + integrity: sha512-vW/9dBahGbpKPcccy3xKkHgdWoH/cAPPc3lQw+3edl7b4j29JfNGVrja0a1d8ZoRe4nTN8GCPrF9aBErDnzx5Q== + /gitlog/4.0.4: + dependencies: + debug: 4.3.1 + tslib: 1.14.1 + dev: true + engines: + node: '>= 10.x' + resolution: + integrity: sha512-jeY2kO7CVyTa6cUM7ZD2ZxIyBkna1xvW2esV/3o8tbhiUneX1UBQCH4D9aMrHgGiohBjyXbuZogyjKXslnY5Yg== + /glob-parent/3.1.0: + dependencies: + is-glob: 3.1.0 + path-dirname: 1.0.2 + dev: true + resolution: + integrity: sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + /glob-parent/5.1.2: + dependencies: + is-glob: 4.0.1 + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + /glob/7.1.6: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.4 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + resolution: + integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + /global-modules/2.0.0: + dependencies: + global-prefix: 3.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + /global-prefix/3.0.0: + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + /globals/11.12.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + /globals/12.4.0: + dependencies: + type-fest: 0.8.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + /globals/13.6.0: + dependencies: + type-fest: 0.20.2 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-YFKCX0SiPg7l5oKYCJ2zZGxcXprVXHcSnVuvzrT3oSENQonVLqM5pf9fN5dLGZGyCjhw8TN8Btwe/jKnZ0pjvQ== + /globals/9.18.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + /globby/11.0.1: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.5 + ignore: 5.1.8 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== + /globby/11.0.2: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.5 + ignore: 5.1.8 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og== + /globby/6.1.0: + dependencies: + array-union: 1.0.2 + glob: 7.1.6 + object-assign: 4.1.1 + pify: 2.3.0 + pinkie-promise: 2.0.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + /graceful-fs/4.2.6: + dev: true + resolution: + integrity: sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + /growly/1.3.0: + dev: true + optional: true + resolution: + integrity: sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + /gzip-size/5.1.1: + dependencies: + duplexer: 0.1.2 + pify: 4.0.1 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== + /gzip-size/6.0.0: + dependencies: + duplexer: 0.1.2 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== + /handle-thing/2.0.1: + dev: true + resolution: + integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + /har-schema/2.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + /har-validator/5.1.5: + dependencies: + ajv: 6.12.6 + har-schema: 2.0.0 + deprecated: this library is no longer supported + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + /harmony-reflect/1.6.1: + dev: true + resolution: + integrity: sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA== + /has-ansi/2.0.0: + dependencies: + ansi-regex: 2.1.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + /has-bigints/1.0.1: + resolution: + integrity: sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + /has-flag/3.0.0: + engines: + node: '>=4' + resolution: + integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + /has-flag/4.0.0: + engines: + node: '>=8' + resolution: + integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + /has-symbols/1.0.2: + engines: + node: '>= 0.4' + resolution: + integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + /has-value/0.3.1: + dependencies: + get-value: 2.0.6 + has-values: 0.1.4 + isobject: 2.1.0 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + /has-value/1.0.0: + dependencies: + get-value: 2.0.6 + has-values: 1.0.0 + isobject: 3.0.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + /has-values/0.1.4: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-bWHeldkd/Km5oCCJrThL/49it3E= + /has-values/1.0.0: + dependencies: + is-number: 3.0.0 + kind-of: 4.0.0 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + /has/1.0.3: + dependencies: + function-bind: 1.1.1 + engines: + node: '>= 0.4.0' + resolution: + integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + /hash-base/3.1.0: + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.0 + safe-buffer: 5.2.1 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + /hash.js/1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: true + resolution: + integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + /he/1.2.0: + dev: true + hasBin: true + resolution: + integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + /hex-color-regex/1.1.0: + dev: true + resolution: + integrity: sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + /history/4.10.1: + dependencies: + '@babel/runtime': 7.13.10 + loose-envify: 1.4.0 + resolve-pathname: 3.0.0 + tiny-invariant: 1.1.0 + tiny-warning: 1.0.3 + value-equal: 1.0.1 + dev: false + resolution: + integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== + /hmac-drbg/1.0.1: + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: true + resolution: + integrity: sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + /hoist-non-react-statics/3.3.2: + dependencies: + react-is: 16.13.1 + resolution: + integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + /hoopy/0.1.4: + dev: true + engines: + node: '>= 6.0.0' + resolution: + integrity: sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== + /hosted-git-info/2.8.8: + dev: true + resolution: + integrity: sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + /hpack.js/2.1.6: + dependencies: + inherits: 2.0.4 + obuf: 1.1.2 + readable-stream: 2.3.7 + wbuf: 1.7.3 + dev: true + resolution: + integrity: sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + /hsl-regex/1.0.0: + dev: true + resolution: + integrity: sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + /hsla-regex/1.0.0: + dev: true + resolution: + integrity: sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + /html-comment-regex/1.1.2: + dev: true + resolution: + integrity: sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== + /html-encoding-sniffer/2.0.1: + dependencies: + whatwg-encoding: 1.0.5 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + /html-entities/1.4.0: + dev: true + resolution: + integrity: sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== + /html-escaper/2.0.2: + dev: true + resolution: + integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + /html-minifier-terser/5.1.1: + dependencies: + camel-case: 4.1.2 + clean-css: 4.2.3 + commander: 4.1.1 + he: 1.2.0 + param-case: 3.0.4 + relateurl: 0.2.7 + terser: 4.8.0 + dev: true + engines: + node: '>=6' + hasBin: true + resolution: + integrity: sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== + /html-parse-stringify2/2.0.1: + dependencies: + void-elements: 2.0.1 + dev: false + resolution: + integrity: sha1-3FZwtyksoVi3vJFsmmc1rIhyg0o= + /html-webpack-plugin/4.5.0_webpack@4.44.2: + dependencies: + '@types/html-minifier-terser': 5.1.1 + '@types/tapable': 1.0.6 + '@types/webpack': 4.41.26 + html-minifier-terser: 5.1.1 + loader-utils: 1.4.0 + lodash: 4.17.21 + pretty-error: 2.1.2 + tapable: 1.1.3 + util.promisify: 1.0.0 + webpack: 4.44.2 + dev: true + engines: + node: '>=6.9' + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + resolution: + integrity: sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw== + /htmlparser2/3.10.1: + dependencies: + domelementtype: 1.3.1 + domhandler: 2.4.2 + domutils: 1.7.0 + entities: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: true + resolution: + integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + /http-deceiver/1.2.7: + dev: true + resolution: + integrity: sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + /http-errors/1.6.3: + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: 1.5.0 + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + /http-errors/1.7.2: + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.1 + statuses: 1.5.0 + toidentifier: 1.0.0 + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + /http-errors/1.7.3: + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.1.1 + statuses: 1.5.0 + toidentifier: 1.0.0 + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + /http-parser-js/0.5.3: + dev: true + resolution: + integrity: sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== + /http-proxy-middleware/0.19.1_debug@4.3.1: + dependencies: + http-proxy: 1.18.1_debug@4.3.1 + is-glob: 4.0.1 + lodash: 4.17.21 + micromatch: 3.1.10 + dev: true + engines: + node: '>=4.0.0' + peerDependencies: + debug: '*' + resolution: + integrity: sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + /http-proxy/1.18.1_debug@4.3.1: + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.13.3_debug@4.3.1 + requires-port: 1.0.0 + dev: true + engines: + node: '>=8.0.0' + peerDependencies: + debug: '*' + resolution: + integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + /http-signature/1.2.0: + dependencies: + assert-plus: 1.0.0 + jsprim: 1.4.1 + sshpk: 1.16.1 + dev: true + engines: + node: '>=0.8' + npm: '>=1.3.7' + resolution: + integrity: sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + /https-browserify/1.0.0: + dev: true + resolution: + integrity: sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + /human-signals/1.1.1: + dev: true + engines: + node: '>=8.12.0' + resolution: + integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + /i18next-browser-languagedetector/6.0.1: + dependencies: + '@babel/runtime': 7.13.10 + dev: false + resolution: + integrity: sha512-3H+OsNQn3FciomUU0d4zPFHsvJv4X66lBelXk9hnIDYDsveIgT7dWZ3/VvcSlpKk9lvCK770blRZ/CwHMXZqWw== + /i18next-http-backend/1.1.1: + dependencies: + node-fetch: 2.6.1 + dev: false + resolution: + integrity: sha512-li3Un71yBu1uCfgJrCg8DOEtljse1er0ja1pM/rFmWLihrD2RFqyrglOsYUHokvzZ53mJB2Mmu4DYgd8/t3R0A== + /i18next/19.9.2: + dependencies: + '@babel/runtime': 7.13.10 + dev: false + resolution: + integrity: sha512-0i6cuo6ER6usEOtKajUUDj92zlG+KArFia0857xxiEHAQcUwh/RtOQocui1LPJwunSYT574Pk64aNva1kwtxZg== + /iconv-lite/0.4.24: + dependencies: + safer-buffer: 2.1.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + /icss-utils/4.1.1: + dependencies: + postcss: 7.0.35 + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + /identity-obj-proxy/3.0.0: + dependencies: + harmony-reflect: 1.6.1 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ= + /ieee754/1.2.1: + dev: true + resolution: + integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + /iferr/0.1.5: + dev: true + resolution: + integrity: sha1-xg7taebY/bazEEofy8ocGS3FtQE= + /ignore/4.0.6: + dev: true + engines: + node: '>= 4' + resolution: + integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + /ignore/5.1.8: + dev: true + engines: + node: '>= 4' + resolution: + integrity: sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + /image-size/0.5.5: + dev: true + engines: + node: '>=0.10.0' + hasBin: true + optional: true + resolution: + integrity: sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= + /immer/8.0.1: + dev: true + resolution: + integrity: sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA== + /import-cwd/2.1.0: + dependencies: + import-from: 2.1.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + /import-fresh/2.0.0: + dependencies: + caller-path: 2.0.0 + resolve-from: 3.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + /import-fresh/3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + /import-from/2.1.0: + dependencies: + resolve-from: 3.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-M1238qev/VOqpHHUuAId7ja387E= + /import-local/2.0.0: + dependencies: + pkg-dir: 3.0.0 + resolve-cwd: 2.0.0 + dev: true + engines: + node: '>=6' + hasBin: true + resolution: + integrity: sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + /import-local/3.0.2: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + dev: true + engines: + node: '>=8' + hasBin: true + resolution: + integrity: sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + /imurmurhash/0.1.4: + dev: true + engines: + node: '>=0.8.19' + resolution: + integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o= + /indent-string/4.0.0: + engines: + node: '>=8' + resolution: + integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + /indexes-of/1.0.1: + dev: true + resolution: + integrity: sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + /infer-owner/1.0.4: + dev: true + resolution: + integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + /inflight/1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + resolution: + integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + /inherits/2.0.1: + dev: true + resolution: + integrity: sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + /inherits/2.0.3: + dev: true + resolution: + integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + /inherits/2.0.4: + resolution: + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + /ini/1.3.8: + dev: true + resolution: + integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + /insert-css/2.0.0: + dev: false + resolution: + integrity: sha1-610Ql7dUL0x56jBg067gfQU4gPQ= + /internal-ip/4.3.0: + dependencies: + default-gateway: 4.2.0 + ipaddr.js: 1.9.1 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + /internal-slot/1.0.3: + dependencies: + get-intrinsic: 1.1.1 + has: 1.0.3 + side-channel: 1.0.4 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + /invariant/2.2.4: + dependencies: + loose-envify: 1.4.0 + dev: true + resolution: + integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + /ip-regex/2.1.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + /ip/1.1.5: + dev: true + resolution: + integrity: sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + /ipaddr.js/1.9.1: + dev: true + engines: + node: '>= 0.10' + resolution: + integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + /is-absolute-url/2.1.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + /is-absolute-url/3.0.3: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + /is-accessor-descriptor/0.1.6: + dependencies: + kind-of: 3.2.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + /is-accessor-descriptor/1.0.0: + dependencies: + kind-of: 6.0.3 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + /is-arguments/1.1.0: + dependencies: + call-bind: 1.0.2 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + /is-arrayish/0.2.1: + dev: true + resolution: + integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + /is-arrayish/0.3.2: + dev: true + resolution: + integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + /is-bigint/1.0.1: + resolution: + integrity: sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== + /is-binary-path/1.0.1: + dependencies: + binary-extensions: 1.13.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + /is-binary-path/2.1.0: + dependencies: + binary-extensions: 2.2.0 + dev: true + engines: + node: '>=8' + optional: true + resolution: + integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + /is-boolean-object/1.1.0: + dependencies: + call-bind: 1.0.2 + engines: + node: '>= 0.4' + resolution: + integrity: sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== + /is-buffer/1.1.6: + dev: true + resolution: + integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + /is-callable/1.2.3: + engines: + node: '>= 0.4' + resolution: + integrity: sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== + /is-ci/2.0.0: + dependencies: + ci-info: 2.0.0 + dev: true + hasBin: true + resolution: + integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + /is-color-stop/1.1.0: + dependencies: + css-color-names: 0.0.4 + hex-color-regex: 1.1.0 + hsl-regex: 1.0.0 + hsla-regex: 1.0.0 + rgb-regex: 1.0.1 + rgba-regex: 1.0.0 + dev: true + resolution: + integrity: sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + /is-core-module/2.2.0: + dependencies: + has: 1.0.3 + dev: true + resolution: + integrity: sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + /is-data-descriptor/0.1.4: + dependencies: + kind-of: 3.2.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + /is-data-descriptor/1.0.0: + dependencies: + kind-of: 6.0.3 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + /is-date-object/1.0.2: + engines: + node: '>= 0.4' + resolution: + integrity: sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + /is-descriptor/0.1.6: + dependencies: + is-accessor-descriptor: 0.1.6 + is-data-descriptor: 0.1.4 + kind-of: 5.1.0 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + /is-descriptor/1.0.2: + dependencies: + is-accessor-descriptor: 1.0.0 + is-data-descriptor: 1.0.0 + kind-of: 6.0.3 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + /is-directory/0.3.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + /is-docker/2.1.1: + dev: true + engines: + node: '>=8' + hasBin: true + resolution: + integrity: sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + /is-extendable/0.1.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + /is-extendable/1.0.1: + dependencies: + is-plain-object: 2.0.4 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + /is-extglob/2.1.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + /is-fullwidth-code-point/2.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + /is-fullwidth-code-point/3.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + /is-generator-fn/2.1.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + /is-glob/3.1.0: + dependencies: + is-extglob: 2.1.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + /is-glob/4.0.1: + dependencies: + is-extglob: 2.1.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + /is-module/1.0.0: + dev: true + resolution: + integrity: sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + /is-negative-zero/2.0.1: + engines: + node: '>= 0.4' + resolution: + integrity: sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + /is-number-object/1.0.4: + engines: + node: '>= 0.4' + resolution: + integrity: sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== + /is-number/3.0.0: + dependencies: + kind-of: 3.2.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + /is-number/7.0.0: + dev: true + engines: + node: '>=0.12.0' + resolution: + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + /is-obj/1.0.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + /is-obj/2.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + /is-path-cwd/2.2.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + /is-path-in-cwd/2.1.0: + dependencies: + is-path-inside: 2.1.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + /is-path-inside/2.1.0: + dependencies: + path-is-inside: 1.0.2 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + /is-plain-obj/1.1.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + /is-plain-object/2.0.4: + dependencies: + isobject: 3.0.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + /is-potential-custom-element-name/1.0.0: + dev: true + resolution: + integrity: sha1-DFLlS8yjkbssSUsh6GJtczbG45c= + /is-regex/1.1.2: + dependencies: + call-bind: 1.0.2 + has-symbols: 1.0.2 + engines: + node: '>= 0.4' + resolution: + integrity: sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== + /is-regexp/1.0.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + /is-resolvable/1.1.0: + dev: true + resolution: + integrity: sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + /is-root/2.1.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + /is-stream/1.1.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + /is-stream/2.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + /is-string/1.0.5: + engines: + node: '>= 0.4' + resolution: + integrity: sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + /is-svg/3.0.0: + dependencies: + html-comment-regex: 1.1.2 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== + /is-symbol/1.0.3: + dependencies: + has-symbols: 1.0.2 + engines: + node: '>= 0.4' + resolution: + integrity: sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + /is-typedarray/1.0.0: + dev: true + resolution: + integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + /is-what/3.14.1: + dev: true + resolution: + integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA== + /is-windows/1.0.2: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + /is-wsl/1.1.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + /is-wsl/2.2.0: + dependencies: + is-docker: 2.1.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + /isarray/0.0.1: + dev: false + resolution: + integrity: sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + /isarray/1.0.0: + dev: true + resolution: + integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + /isexe/2.0.0: + dev: true + resolution: + integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + /isobject/2.1.0: + dependencies: + isarray: 1.0.0 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + /isobject/3.0.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + /isstream/0.1.2: + dev: true + resolution: + integrity: sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + /istanbul-lib-coverage/3.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== + /istanbul-lib-instrument/4.0.3: + dependencies: + '@babel/core': 7.12.3 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.0.0 + semver: 6.3.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + /istanbul-lib-report/3.0.0: + dependencies: + istanbul-lib-coverage: 3.0.0 + make-dir: 3.1.0 + supports-color: 7.2.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + /istanbul-lib-source-maps/4.0.0: + dependencies: + debug: 4.3.1 + istanbul-lib-coverage: 3.0.0 + source-map: 0.6.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + /istanbul-reports/3.0.2: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + /jest-changed-files/26.6.2: + dependencies: + '@jest/types': 26.6.2 + execa: 4.1.0 + throat: 5.0.0 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== + /jest-circus/26.6.0: + dependencies: + '@babel/traverse': 7.13.0 + '@jest/environment': 26.6.2 + '@jest/test-result': 26.6.2 + '@jest/types': 26.6.2 + '@types/babel__traverse': 7.11.1 + '@types/node': 14.14.34 + chalk: 4.1.0 + co: 4.6.0 + dedent: 0.7.0 + expect: 26.6.2 + is-generator-fn: 2.1.0 + jest-each: 26.6.2 + jest-matcher-utils: 26.6.2 + jest-message-util: 26.6.2 + jest-runner: 26.6.3 + jest-runtime: 26.6.3 + jest-snapshot: 26.6.2 + jest-util: 26.6.2 + pretty-format: 26.6.2 + stack-utils: 2.0.3 + throat: 5.0.0 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-L2/Y9szN6FJPWFK8kzWXwfp+FOR7xq0cUL4lIsdbIdwz3Vh6P1nrpcqOleSzr28zOtSHQNV9Z7Tl+KkuK7t5Ng== + /jest-cli/26.6.3: + dependencies: + '@jest/core': 26.6.3 + '@jest/test-result': 26.6.2 + '@jest/types': 26.6.2 + chalk: 4.1.0 + exit: 0.1.2 + graceful-fs: 4.2.6 + import-local: 3.0.2 + is-ci: 2.0.0 + jest-config: 26.6.3 + jest-util: 26.6.2 + jest-validate: 26.6.2 + prompts: 2.4.0 + yargs: 15.4.1 + dev: true + engines: + node: '>= 10.14.2' + hasBin: true + resolution: + integrity: sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== + /jest-config/26.6.3: + dependencies: + '@babel/core': 7.12.3 + '@jest/test-sequencer': 26.6.3 + '@jest/types': 26.6.2 + babel-jest: 26.6.3_@babel+core@7.12.3 + chalk: 4.1.0 + deepmerge: 4.2.2 + glob: 7.1.6 + graceful-fs: 4.2.6 + jest-environment-jsdom: 26.6.2 + jest-environment-node: 26.6.2 + jest-get-type: 26.3.0 + jest-jasmine2: 26.6.3 + jest-regex-util: 26.0.0 + jest-resolve: 26.6.2 + jest-util: 26.6.2 + jest-validate: 26.6.2 + micromatch: 4.0.2 + pretty-format: 26.6.2 + dev: true + engines: + node: '>= 10.14.2' + peerDependencies: + ts-node: '>=9.0.0' + peerDependenciesMeta: + ts-node: + optional: true + resolution: + integrity: sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== + /jest-diff/26.6.2: + dependencies: + chalk: 4.1.0 + diff-sequences: 26.6.2 + jest-get-type: 26.3.0 + pretty-format: 26.6.2 + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== + /jest-docblock/26.0.0: + dependencies: + detect-newline: 3.1.0 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== + /jest-each/26.6.2: + dependencies: + '@jest/types': 26.6.2 + chalk: 4.1.0 + jest-get-type: 26.3.0 + jest-util: 26.6.2 + pretty-format: 26.6.2 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== + /jest-environment-jsdom/26.6.2: + dependencies: + '@jest/environment': 26.6.2 + '@jest/fake-timers': 26.6.2 + '@jest/types': 26.6.2 + '@types/node': 14.14.34 + jest-mock: 26.6.2 + jest-util: 26.6.2 + jsdom: 16.5.1 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== + /jest-environment-node/26.6.2: + dependencies: + '@jest/environment': 26.6.2 + '@jest/fake-timers': 26.6.2 + '@jest/types': 26.6.2 + '@types/node': 14.14.34 + jest-mock: 26.6.2 + jest-util: 26.6.2 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== + /jest-get-type/26.3.0: + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== + /jest-haste-map/26.6.2: + dependencies: + '@jest/types': 26.6.2 + '@types/graceful-fs': 4.1.5 + '@types/node': 14.14.34 + anymatch: 3.1.1 + fb-watchman: 2.0.1 + graceful-fs: 4.2.6 + jest-regex-util: 26.0.0 + jest-serializer: 26.6.2 + jest-util: 26.6.2 + jest-worker: 26.6.2 + micromatch: 4.0.2 + sane: 4.1.0 + walker: 1.0.7 + dev: true + engines: + node: '>= 10.14.2' + optionalDependencies: + fsevents: 2.3.2 + resolution: + integrity: sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== + /jest-jasmine2/26.6.3: + dependencies: + '@babel/traverse': 7.13.0 + '@jest/environment': 26.6.2 + '@jest/source-map': 26.6.2 + '@jest/test-result': 26.6.2 + '@jest/types': 26.6.2 + '@types/node': 14.14.34 + chalk: 4.1.0 + co: 4.6.0 + expect: 26.6.2 + is-generator-fn: 2.1.0 + jest-each: 26.6.2 + jest-matcher-utils: 26.6.2 + jest-message-util: 26.6.2 + jest-runtime: 26.6.3 + jest-snapshot: 26.6.2 + jest-util: 26.6.2 + pretty-format: 26.6.2 + throat: 5.0.0 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== + /jest-leak-detector/26.6.2: + dependencies: + jest-get-type: 26.3.0 + pretty-format: 26.6.2 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== + /jest-matcher-utils/26.6.2: + dependencies: + chalk: 4.1.0 + jest-diff: 26.6.2 + jest-get-type: 26.3.0 + pretty-format: 26.6.2 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== + /jest-message-util/26.6.2: + dependencies: + '@babel/code-frame': 7.12.13 + '@jest/types': 26.6.2 + '@types/stack-utils': 2.0.0 + chalk: 4.1.0 + graceful-fs: 4.2.6 + micromatch: 4.0.2 + pretty-format: 26.6.2 + slash: 3.0.0 + stack-utils: 2.0.3 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== + /jest-mock/26.6.2: + dependencies: + '@jest/types': 26.6.2 + '@types/node': 14.14.34 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== + /jest-pnp-resolver/1.2.2_jest-resolve@26.6.0: + dependencies: + jest-resolve: 26.6.0 + dev: true + engines: + node: '>=6' + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + resolution: + integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + /jest-pnp-resolver/1.2.2_jest-resolve@26.6.2: + dependencies: + jest-resolve: 26.6.2 + dev: true + engines: + node: '>=6' + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + resolution: + integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + /jest-regex-util/26.0.0: + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== + /jest-resolve-dependencies/26.6.3: + dependencies: + '@jest/types': 26.6.2 + jest-regex-util: 26.0.0 + jest-snapshot: 26.6.2 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== + /jest-resolve/26.6.0: + dependencies: + '@jest/types': 26.6.2 + chalk: 4.1.0 + graceful-fs: 4.2.6 + jest-pnp-resolver: 1.2.2_jest-resolve@26.6.0 + jest-util: 26.6.2 + read-pkg-up: 7.0.1 + resolve: 1.18.1 + slash: 3.0.0 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-tRAz2bwraHufNp+CCmAD8ciyCpXCs1NQxB5EJAmtCFy6BN81loFEGWKzYu26Y62lAJJe4X4jg36Kf+NsQyiStQ== + /jest-resolve/26.6.2: + dependencies: + '@jest/types': 26.6.2 + chalk: 4.1.0 + graceful-fs: 4.2.6 + jest-pnp-resolver: 1.2.2_jest-resolve@26.6.2 + jest-util: 26.6.2 + read-pkg-up: 7.0.1 + resolve: 1.18.1 + slash: 3.0.0 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== + /jest-runner/26.6.3: + dependencies: + '@jest/console': 26.6.2 + '@jest/environment': 26.6.2 + '@jest/test-result': 26.6.2 + '@jest/types': 26.6.2 + '@types/node': 14.14.34 + chalk: 4.1.0 + emittery: 0.7.2 + exit: 0.1.2 + graceful-fs: 4.2.6 + jest-config: 26.6.3 + jest-docblock: 26.0.0 + jest-haste-map: 26.6.2 + jest-leak-detector: 26.6.2 + jest-message-util: 26.6.2 + jest-resolve: 26.6.2 + jest-runtime: 26.6.3 + jest-util: 26.6.2 + jest-worker: 26.6.2 + source-map-support: 0.5.19 + throat: 5.0.0 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== + /jest-runtime/26.6.3: + dependencies: + '@jest/console': 26.6.2 + '@jest/environment': 26.6.2 + '@jest/fake-timers': 26.6.2 + '@jest/globals': 26.6.2 + '@jest/source-map': 26.6.2 + '@jest/test-result': 26.6.2 + '@jest/transform': 26.6.2 + '@jest/types': 26.6.2 + '@types/yargs': 15.0.13 + chalk: 4.1.0 + cjs-module-lexer: 0.6.0 + collect-v8-coverage: 1.0.1 + exit: 0.1.2 + glob: 7.1.6 + graceful-fs: 4.2.6 + jest-config: 26.6.3 + jest-haste-map: 26.6.2 + jest-message-util: 26.6.2 + jest-mock: 26.6.2 + jest-regex-util: 26.0.0 + jest-resolve: 26.6.2 + jest-snapshot: 26.6.2 + jest-util: 26.6.2 + jest-validate: 26.6.2 + slash: 3.0.0 + strip-bom: 4.0.0 + yargs: 15.4.1 + dev: true + engines: + node: '>= 10.14.2' + hasBin: true + resolution: + integrity: sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== + /jest-serializer/26.6.2: + dependencies: + '@types/node': 14.14.34 + graceful-fs: 4.2.6 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== + /jest-snapshot/26.6.2: + dependencies: + '@babel/types': 7.13.0 + '@jest/types': 26.6.2 + '@types/babel__traverse': 7.11.1 + '@types/prettier': 2.2.2 + chalk: 4.1.0 + expect: 26.6.2 + graceful-fs: 4.2.6 + jest-diff: 26.6.2 + jest-get-type: 26.3.0 + jest-haste-map: 26.6.2 + jest-matcher-utils: 26.6.2 + jest-message-util: 26.6.2 + jest-resolve: 26.6.2 + natural-compare: 1.4.0 + pretty-format: 26.6.2 + semver: 7.3.4 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== + /jest-util/26.6.2: + dependencies: + '@jest/types': 26.6.2 + '@types/node': 14.14.34 + chalk: 4.1.0 + graceful-fs: 4.2.6 + is-ci: 2.0.0 + micromatch: 4.0.2 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== + /jest-validate/26.6.2: + dependencies: + '@jest/types': 26.6.2 + camelcase: 6.2.0 + chalk: 4.1.0 + jest-get-type: 26.3.0 + leven: 3.1.0 + pretty-format: 26.6.2 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== + /jest-watch-typeahead/0.6.1_jest@26.6.0: + dependencies: + ansi-escapes: 4.3.1 + chalk: 4.1.0 + jest: 26.6.0 + jest-regex-util: 26.0.0 + jest-watcher: 26.6.2 + slash: 3.0.0 + string-length: 4.0.1 + strip-ansi: 6.0.0 + dev: true + engines: + node: '>=10' + peerDependencies: + jest: ^26.0.0 + resolution: + integrity: sha512-ITVnHhj3Jd/QkqQcTqZfRgjfyRhDFM/auzgVo2RKvSwi18YMvh0WvXDJFoFED6c7jd/5jxtu4kSOb9PTu2cPVg== + /jest-watcher/26.6.2: + dependencies: + '@jest/test-result': 26.6.2 + '@jest/types': 26.6.2 + '@types/node': 14.14.34 + ansi-escapes: 4.3.1 + chalk: 4.1.0 + jest-util: 26.6.2 + string-length: 4.0.1 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== + /jest-worker/24.9.0: + dependencies: + merge-stream: 2.0.0 + supports-color: 6.1.0 + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== + /jest-worker/26.6.2: + dependencies: + '@types/node': 14.14.34 + merge-stream: 2.0.0 + supports-color: 7.2.0 + dev: true + engines: + node: '>= 10.13.0' + resolution: + integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + /jest/26.6.0: + dependencies: + '@jest/core': 26.6.3 + import-local: 3.0.2 + jest-cli: 26.6.3 + dev: true + engines: + node: '>= 10.14.2' + hasBin: true + resolution: + integrity: sha512-jxTmrvuecVISvKFFhOkjsWRZV7sFqdSUAd1ajOKY+/QE/aLBVstsJ/dX8GczLzwiT6ZEwwmZqtCUHLHHQVzcfA== + /jju/1.4.0: + dev: true + resolution: + integrity: sha1-o6vicYryQaKykE+EpiWXDzia4yo= + /js-tokens/3.0.2: + dev: true + resolution: + integrity: sha1-mGbfOVECEw449/mWvOtlRDIJwls= + /js-tokens/4.0.0: + resolution: + integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + /js-yaml/3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + hasBin: true + resolution: + integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + /jsbn/0.1.1: + dev: true + resolution: + integrity: sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + /jsdom/16.5.1: + dependencies: + abab: 2.0.5 + acorn: 8.1.0 + acorn-globals: 6.0.0 + cssom: 0.4.4 + cssstyle: 2.3.0 + data-urls: 2.0.0 + decimal.js: 10.2.1 + domexception: 2.0.1 + escodegen: 2.0.0 + html-encoding-sniffer: 2.0.1 + is-potential-custom-element-name: 1.0.0 + nwsapi: 2.2.0 + parse5: 6.0.1 + request: 2.88.2 + request-promise-native: 1.0.9_request@2.88.2 + saxes: 5.0.1 + symbol-tree: 3.2.4 + tough-cookie: 4.0.0 + w3c-hr-time: 1.0.2 + w3c-xmlserializer: 2.0.0 + webidl-conversions: 6.1.0 + whatwg-encoding: 1.0.5 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.4.0 + ws: 7.4.4 + xml-name-validator: 3.0.0 + dev: true + engines: + node: '>=10' + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + resolution: + integrity: sha512-pF73EOsJgwZekbDHEY5VO/yKXUkab/DuvrQB/ANVizbr6UAHJsDdHXuotZYwkJSGQl1JM+ivXaqY+XBDDL4TiA== + /jsesc/0.5.0: + dev: true + hasBin: true + resolution: + integrity: sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + /jsesc/2.5.2: + dev: true + engines: + node: '>=4' + hasBin: true + resolution: + integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + /json-parse-better-errors/1.0.2: + dev: true + resolution: + integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + /json-parse-even-better-errors/2.3.1: + dev: true + resolution: + integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + /json-schema-traverse/0.4.1: + dev: true + resolution: + integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + /json-schema-traverse/1.0.0: + dev: true + resolution: + integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + /json-schema/0.2.3: + dev: true + resolution: + integrity: sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + /json-stable-stringify-without-jsonify/1.0.1: + dev: true + resolution: + integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + /json-stringify-safe/5.0.1: + dev: true + resolution: + integrity: sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + /json2mq/0.2.0: + dependencies: + string-convert: 0.2.1 + dev: false + resolution: + integrity: sha1-tje9O6nqvhIsg+lyBIOusQ0skEo= + /json3/3.3.3: + dev: true + resolution: + integrity: sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + /json5/1.0.1: + dependencies: + minimist: 1.2.5 + dev: true + hasBin: true + resolution: + integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + /json5/2.2.0: + dependencies: + minimist: 1.2.5 + engines: + node: '>=6' + hasBin: true + resolution: + integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + /jsonfile/4.0.0: + dev: true + optionalDependencies: + graceful-fs: 4.2.6 + resolution: + integrity: sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + /jsonfile/6.1.0: + dependencies: + universalify: 2.0.0 + dev: true + optionalDependencies: + graceful-fs: 4.2.6 + resolution: + integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + /jsprim/1.4.1: + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.2.3 + verror: 1.10.0 + dev: true + engines: + '0': node >=0.6.0 + resolution: + integrity: sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + /jsx-ast-utils/3.2.0: + dependencies: + array-includes: 3.1.3 + object.assign: 4.1.2 + dev: true + engines: + node: '>=4.0' + resolution: + integrity: sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q== + /killable/1.0.1: + dev: true + resolution: + integrity: sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + /kind-of/3.2.2: + dependencies: + is-buffer: 1.1.6 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + /kind-of/4.0.0: + dependencies: + is-buffer: 1.1.6 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + /kind-of/5.1.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + /kind-of/6.0.3: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + /kleur/3.0.3: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + /klona/2.0.4: + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== + /language-subtag-registry/0.3.21: + dev: true + resolution: + integrity: sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg== + /language-tags/1.0.5: + dependencies: + language-subtag-registry: 0.3.21 + dev: true + resolution: + integrity: sha1-0yHbxNowuovzAk4ED6XBRmH5GTo= + /last-call-webpack-plugin/3.0.0: + dependencies: + lodash: 4.17.21 + webpack-sources: 1.4.3 + dev: true + resolution: + integrity: sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w== + /less-loader/7.3.0_less@4.1.1: + dependencies: + klona: 2.0.4 + less: 4.1.1 + loader-utils: 2.0.0 + schema-utils: 3.0.0 + dev: true + engines: + node: '>= 10.13.0' + peerDependencies: + less: ^3.5.0 || ^4.0.0 + webpack: ^4.0.0 || ^5.0.0 + resolution: + integrity: sha512-Mi8915g7NMaLlgi77mgTTQvK022xKRQBIVDSyfl3ErTuBhmZBQab0mjeJjNNqGbdR+qrfTleKXqbGI4uEFavxg== + /less/4.1.1: + dependencies: + copy-anything: 2.0.3 + parse-node-version: 1.0.1 + tslib: 1.14.1 + dev: true + engines: + node: '>=6' + hasBin: true + optionalDependencies: + errno: 0.1.8 + graceful-fs: 4.2.6 + image-size: 0.5.5 + make-dir: 2.1.0 + mime: 1.6.0 + needle: 2.6.0 + source-map: 0.6.1 + resolution: + integrity: sha512-w09o8tZFPThBscl5d0Ggp3RcrKIouBoQscnOMgFH3n5V3kN/CXGHNfCkRPtxJk6nKryDXaV9aHLK55RXuH4sAw== + /leven/3.1.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + /levn/0.3.0: + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + /levn/0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + /lines-and-columns/1.1.6: + dev: true + resolution: + integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + /load-json-file/2.0.0: + dependencies: + graceful-fs: 4.2.6 + parse-json: 2.2.0 + pify: 2.3.0 + strip-bom: 3.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + /loader-runner/2.4.0: + dev: true + engines: + node: '>=4.3.0 <5.0.0 || >=5.10' + resolution: + integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + /loader-utils/1.2.3: + dependencies: + big.js: 5.2.2 + emojis-list: 2.1.0 + json5: 1.0.1 + dev: true + engines: + node: '>=4.0.0' + resolution: + integrity: sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + /loader-utils/1.4.0: + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 1.0.1 + dev: true + engines: + node: '>=4.0.0' + resolution: + integrity: sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + /loader-utils/2.0.0: + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.0 + dev: true + engines: + node: '>=8.9.0' + resolution: + integrity: sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + /locate-path/2.0.0: + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + /locate-path/3.0.0: + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + /locate-path/5.0.0: + dependencies: + p-locate: 4.1.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + /lodash-es/4.17.21: + dev: false + resolution: + integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + /lodash._reinterpolate/3.0.0: + dev: true + resolution: + integrity: sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= + /lodash.debounce/4.0.8: + dev: true + resolution: + integrity: sha1-gteb/zCmfEAF/9XiUVMArZyk168= + /lodash.memoize/4.1.2: + dev: true + resolution: + integrity: sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + /lodash.sortby/4.7.0: + dev: true + resolution: + integrity: sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + /lodash.template/4.5.0: + dependencies: + lodash._reinterpolate: 3.0.0 + lodash.templatesettings: 4.2.0 + dev: true + resolution: + integrity: sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== + /lodash.templatesettings/4.2.0: + dependencies: + lodash._reinterpolate: 3.0.0 + dev: true + resolution: + integrity: sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== + /lodash.uniq/4.5.0: + dev: true + resolution: + integrity: sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + /lodash/4.17.21: + resolution: + integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + /loglevel/1.7.1: + dev: true + engines: + node: '>= 0.6.0' + resolution: + integrity: sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== + /loose-envify/1.4.0: + dependencies: + js-tokens: 4.0.0 + hasBin: true + resolution: + integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + /lower-case/2.0.2: + dependencies: + tslib: 2.1.0 + dev: true + resolution: + integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + /lru-cache/5.1.1: + dependencies: + yallist: 3.1.1 + dev: true + resolution: + integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + /lru-cache/6.0.0: + dependencies: + yallist: 4.0.0 + engines: + node: '>=10' + resolution: + integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + /lz-string/1.4.4: + dev: false + hasBin: true + resolution: + integrity: sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= + /magic-string/0.25.7: + dependencies: + sourcemap-codec: 1.4.8 + dev: true + resolution: + integrity: sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + /make-dir/2.1.0: + dependencies: + pify: 4.0.1 + semver: 5.7.1 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + /make-dir/3.1.0: + dependencies: + semver: 6.3.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + /makeerror/1.0.11: + dependencies: + tmpl: 1.0.4 + dev: true + resolution: + integrity: sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= + /map-cache/0.2.2: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + /map-visit/1.0.0: + dependencies: + object-visit: 1.0.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + /markdown-to-jsx/7.1.2_react@17.0.1: + dependencies: + react: 17.0.1 + dev: false + engines: + node: '>= 4' + peerDependencies: + react: '>= 0.14.0' + resolution: + integrity: sha512-O8DMCl32V34RrD+ZHxcAPc2+kYytuDIoQYjY36RVdsLK7uHjgNVvFec4yv0X6LgB4YEZgSvK5QtFi5YVqEpoMA== + /md5.js/1.3.5: + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + resolution: + integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + /mdn-data/2.0.14: + dev: true + resolution: + integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + /mdn-data/2.0.4: + dev: true + resolution: + integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + /media-typer/0.3.0: + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + /memory-fs/0.4.1: + dependencies: + errno: 0.1.8 + readable-stream: 2.3.7 + dev: true + resolution: + integrity: sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + /memory-fs/0.5.0: + dependencies: + errno: 0.1.8 + readable-stream: 2.3.7 + dev: true + engines: + node: '>=4.3.0 <5.0.0 || >=5.10' + resolution: + integrity: sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + /merge-descriptors/1.0.1: + dev: true + resolution: + integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + /merge-stream/2.0.0: + dev: true + resolution: + integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + /merge2/1.4.1: + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + /methods/1.1.2: + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + /microevent.ts/0.1.1: + dev: true + resolution: + integrity: sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== + /micromatch/3.1.10: + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + braces: 2.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + extglob: 2.0.4 + fragment-cache: 0.2.1 + kind-of: 6.0.3 + nanomatch: 1.2.13 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + /micromatch/4.0.2: + dependencies: + braces: 3.0.2 + picomatch: 2.2.2 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + /miller-rabin/4.0.1: + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + dev: true + hasBin: true + resolution: + integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + /mime-db/1.46.0: + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ== + /mime-types/2.1.29: + dependencies: + mime-db: 1.46.0 + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ== + /mime/1.6.0: + dev: true + engines: + node: '>=4' + hasBin: true + resolution: + integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + /mime/2.5.2: + dev: true + engines: + node: '>=4.0.0' + hasBin: true + resolution: + integrity: sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== + /mimic-fn/2.1.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + /min-indent/1.0.1: + dev: false + engines: + node: '>=4' + resolution: + integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + /mini-create-react-context/0.4.1_prop-types@15.7.2+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + prop-types: 15.7.2 + react: 17.0.1 + tiny-warning: 1.0.3 + dev: false + peerDependencies: + prop-types: ^15.0.0 + react: ^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + resolution: + integrity: sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ== + /mini-css-extract-plugin/0.11.3_webpack@4.44.2: + dependencies: + loader-utils: 1.4.0 + normalize-url: 1.9.1 + schema-utils: 1.0.0 + webpack: 4.44.2 + webpack-sources: 1.4.3 + dev: true + engines: + node: '>= 6.9.0' + peerDependencies: + webpack: ^4.4.0 || ^5.0.0 + resolution: + integrity: sha512-n9BA8LonkOkW1/zn+IbLPQmovsL0wMb9yx75fMJQZf2X1Zoec9yTZtyMePcyu19wPkmFbzZZA6fLTotpFhQsOA== + /mini-store/3.0.6_react-dom@17.0.1+react@17.0.1: + dependencies: + hoist-non-react-statics: 3.3.2 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + shallowequal: 1.1.0 + dev: false + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-YzffKHbYsMQGUWQRKdsearR79QsMzzJcDDmZKlJBqt5JNkqpyJHYlK6gP61O36X+sLf76sO9G6mhKBe83gIZIQ== + /minimalistic-assert/1.0.1: + dev: true + resolution: + integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + /minimalistic-crypto-utils/1.0.1: + dev: true + resolution: + integrity: sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + /minimatch/3.0.4: + dependencies: + brace-expansion: 1.1.11 + dev: true + resolution: + integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + /minimist/1.2.5: + resolution: + integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + /minipass-collect/1.0.2: + dependencies: + minipass: 3.1.3 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + /minipass-flush/1.0.5: + dependencies: + minipass: 3.1.3 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + /minipass-pipeline/1.2.4: + dependencies: + minipass: 3.1.3 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + /minipass/3.1.3: + dependencies: + yallist: 4.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + /minizlib/2.1.2: + dependencies: + minipass: 3.1.3 + yallist: 4.0.0 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + /mississippi/3.0.0: + dependencies: + concat-stream: 1.6.2 + duplexify: 3.7.1 + end-of-stream: 1.4.4 + flush-write-stream: 1.1.1 + from2: 2.3.0 + parallel-transform: 1.2.0 + pump: 3.0.0 + pumpify: 1.5.1 + stream-each: 1.2.3 + through2: 2.0.5 + dev: true + engines: + node: '>=4.0.0' + resolution: + integrity: sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + /mixin-deep/1.3.2: + dependencies: + for-in: 1.0.2 + is-extendable: 1.0.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + /mkdirp/0.5.5: + dependencies: + minimist: 1.2.5 + dev: true + hasBin: true + resolution: + integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + /mkdirp/1.0.4: + dev: true + engines: + node: '>=10' + hasBin: true + resolution: + integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + /moment/2.29.1: + dev: false + resolution: + integrity: sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== + /move-concurrently/1.0.1: + dependencies: + aproba: 1.2.0 + copy-concurrently: 1.0.5 + fs-write-stream-atomic: 1.0.10 + mkdirp: 0.5.5 + rimraf: 2.7.1 + run-queue: 1.0.3 + dev: true + resolution: + integrity: sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + /ms/2.0.0: + dev: true + resolution: + integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + /ms/2.1.1: + dev: true + resolution: + integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + /ms/2.1.2: + resolution: + integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + /ms/2.1.3: + dev: true + resolution: + integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + /multicast-dns-service-types/1.1.0: + dev: true + resolution: + integrity: sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + /multicast-dns/6.2.3: + dependencies: + dns-packet: 1.3.1 + thunky: 1.1.0 + dev: true + hasBin: true + resolution: + integrity: sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + /nan/2.14.2: + dev: true + optional: true + resolution: + integrity: sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + /nanoid/3.1.21: + dev: true + engines: + node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 + hasBin: true + resolution: + integrity: sha512-A6oZraK4DJkAOICstsGH98dvycPr/4GGDH7ZWKmMdd3vGcOurZ6JmWFUt0DA5bzrrn2FrUjmv6mFNWvv8jpppA== + /nanomatch/1.2.13: + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + fragment-cache: 0.2.1 + is-windows: 1.0.2 + kind-of: 6.0.3 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + /native-url/0.2.6: + dependencies: + querystring: 0.2.1 + dev: true + resolution: + integrity: sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA== + /natural-compare/1.4.0: + dev: true + resolution: + integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + /needle/2.6.0: + dependencies: + debug: 3.2.7 + iconv-lite: 0.4.24 + sax: 1.2.4 + dev: true + engines: + node: '>= 4.4.x' + hasBin: true + optional: true + resolution: + integrity: sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg== + /negotiator/0.6.2: + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + /neo-async/2.6.2: + dev: true + resolution: + integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + /next-tick/1.0.0: + dev: true + resolution: + integrity: sha1-yobR/ogoFpsBICCOPchCS524NCw= + /nice-try/1.0.5: + dev: true + resolution: + integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + /no-case/3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.1.0 + dev: true + resolution: + integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + /node-fetch/2.6.1: + dev: false + engines: + node: 4.x || >=6.0.0 + resolution: + integrity: sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + /node-forge/0.10.0: + dev: true + engines: + node: '>= 6.0.0' + resolution: + integrity: sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + /node-int64/0.4.0: + dev: true + resolution: + integrity: sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + /node-libs-browser/2.2.1: + dependencies: + assert: 1.5.0 + browserify-zlib: 0.2.0 + buffer: 4.9.2 + console-browserify: 1.2.0 + constants-browserify: 1.0.0 + crypto-browserify: 3.12.0 + domain-browser: 1.2.0 + events: 3.3.0 + https-browserify: 1.0.0 + os-browserify: 0.3.0 + path-browserify: 0.0.1 + process: 0.11.10 + punycode: 1.4.1 + querystring-es3: 0.2.1 + readable-stream: 2.3.7 + stream-browserify: 2.0.2 + stream-http: 2.8.3 + string_decoder: 1.3.0 + timers-browserify: 2.0.12 + tty-browserify: 0.0.0 + url: 0.11.0 + util: 0.11.1 + vm-browserify: 1.1.2 + dev: true + resolution: + integrity: sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + /node-modules-regexp/1.0.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + /node-notifier/8.0.2: + dependencies: + growly: 1.3.0 + is-wsl: 2.2.0 + semver: 7.3.4 + shellwords: 0.1.1 + uuid: 8.3.2 + which: 2.0.2 + dev: true + optional: true + resolution: + integrity: sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== + /node-releases/1.1.71: + dev: true + resolution: + integrity: sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== + /normalize-package-data/2.5.0: + dependencies: + hosted-git-info: 2.8.8 + resolve: 1.18.1 + semver: 5.7.1 + validate-npm-package-license: 3.0.4 + dev: true + resolution: + integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + /normalize-path/2.1.1: + dependencies: + remove-trailing-separator: 1.1.0 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + /normalize-path/3.0.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + /normalize-range/0.1.2: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + /normalize-url/1.9.1: + dependencies: + object-assign: 4.1.1 + prepend-http: 1.0.4 + query-string: 4.3.4 + sort-keys: 1.1.2 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + /normalize-url/3.3.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + /npm-run-path/2.0.2: + dependencies: + path-key: 2.0.1 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + /npm-run-path/4.0.1: + dependencies: + path-key: 3.1.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + /nth-check/1.0.2: + dependencies: + boolbase: 1.0.0 + dev: true + resolution: + integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + /num2fraction/1.2.2: + dev: true + resolution: + integrity: sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + /nwsapi/2.2.0: + dev: true + resolution: + integrity: sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + /oauth-sign/0.9.0: + dev: true + resolution: + integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + /object-assign/4.1.1: + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + /object-copy/0.1.0: + dependencies: + copy-descriptor: 0.1.1 + define-property: 0.2.5 + kind-of: 3.2.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + /object-inspect/1.9.0: + resolution: + integrity: sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + /object-is/1.1.5: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + /object-keys/1.1.1: + engines: + node: '>= 0.4' + resolution: + integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + /object-visit/1.0.1: + dependencies: + isobject: 3.0.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + /object.assign/4.1.2: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + has-symbols: 1.0.2 + object-keys: 1.1.1 + engines: + node: '>= 0.4' + resolution: + integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + /object.entries/1.1.3: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.0 + has: 1.0.3 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== + /object.fromentries/2.0.4: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.0 + has: 1.0.3 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== + /object.getownpropertydescriptors/2.1.2: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.0 + dev: true + engines: + node: '>= 0.8' + resolution: + integrity: sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== + /object.pick/1.3.0: + dependencies: + isobject: 3.0.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + /object.values/1.1.3: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.0 + has: 1.0.3 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw== + /obuf/1.1.2: + dev: true + resolution: + integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + /on-finished/2.3.0: + dependencies: + ee-first: 1.1.1 + dev: true + engines: + node: '>= 0.8' + resolution: + integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + /on-headers/1.0.2: + dev: true + engines: + node: '>= 0.8' + resolution: + integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + /once/1.4.0: + dependencies: + wrappy: 1.0.2 + dev: true + resolution: + integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + /onetime/5.1.2: + dependencies: + mimic-fn: 2.1.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + /open/7.4.2: + dependencies: + is-docker: 2.1.1 + is-wsl: 2.2.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + /opener/1.5.2: + dev: true + hasBin: true + resolution: + integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + /opn/5.5.0: + dependencies: + is-wsl: 1.1.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + /optimize-css-assets-webpack-plugin/5.0.4_webpack@4.44.2: + dependencies: + cssnano: 4.1.10 + last-call-webpack-plugin: 3.0.0 + webpack: 4.44.2 + dev: true + peerDependencies: + webpack: ^4.0.0 + resolution: + integrity: sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A== + /optionator/0.8.3: + dependencies: + deep-is: 0.1.3 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.3 + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + /optionator/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 + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + /original/1.0.2: + dependencies: + url-parse: 1.5.1 + dev: true + resolution: + integrity: sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + /os-browserify/0.3.0: + dev: true + resolution: + integrity: sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + /p-each-series/2.2.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== + /p-finally/1.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + /p-limit/1.3.0: + dependencies: + p-try: 1.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + /p-limit/2.3.0: + dependencies: + p-try: 2.2.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + /p-limit/3.1.0: + dependencies: + yocto-queue: 0.1.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + /p-locate/2.0.0: + dependencies: + p-limit: 1.3.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + /p-locate/3.0.0: + dependencies: + p-limit: 2.3.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + /p-locate/4.1.0: + dependencies: + p-limit: 2.3.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + /p-map/2.1.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + /p-map/4.0.0: + dependencies: + aggregate-error: 3.1.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + /p-retry/3.0.1: + dependencies: + retry: 0.12.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + /p-try/1.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + /p-try/2.2.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + /pako/1.0.11: + dev: true + resolution: + integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + /parallel-transform/1.2.0: + dependencies: + cyclist: 1.0.1 + inherits: 2.0.4 + readable-stream: 2.3.7 + dev: true + resolution: + integrity: sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + /param-case/3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.1.0 + dev: true + resolution: + integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + /parent-module/1.0.1: + dependencies: + callsites: 3.1.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + /parse-asn1/5.1.6: + dependencies: + asn1.js: 5.4.1 + browserify-aes: 1.2.0 + evp_bytestokey: 1.0.3 + pbkdf2: 3.1.1 + safe-buffer: 5.2.1 + dev: true + resolution: + integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + /parse-json/2.2.0: + dependencies: + error-ex: 1.3.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + /parse-json/4.0.0: + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + /parse-json/5.2.0: + dependencies: + '@babel/code-frame': 7.12.13 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.1.6 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + /parse-node-version/1.0.1: + dev: true + engines: + node: '>= 0.10' + resolution: + integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== + /parse5/6.0.1: + dev: true + resolution: + integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + /parseurl/1.3.3: + dev: true + engines: + node: '>= 0.8' + resolution: + integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + /pascal-case/3.1.2: + dependencies: + no-case: 3.0.4 + tslib: 2.1.0 + dev: true + resolution: + integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + /pascalcase/0.1.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + /path-browserify/0.0.1: + dev: true + resolution: + integrity: sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + /path-dirname/1.0.2: + dev: true + resolution: + integrity: sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + /path-exists/3.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + /path-exists/4.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + /path-is-absolute/1.0.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + /path-is-inside/1.0.2: + dev: true + resolution: + integrity: sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + /path-key/2.0.1: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + /path-key/3.1.1: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + /path-parse/1.0.6: + dev: true + resolution: + integrity: sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + /path-to-regexp/0.1.7: + dev: true + resolution: + integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + /path-to-regexp/1.8.0: + dependencies: + isarray: 0.0.1 + dev: false + resolution: + integrity: sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + /path-type/2.0.0: + dependencies: + pify: 2.3.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + /path-type/4.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + /pbkdf2/3.1.1: + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: true + engines: + node: '>=0.12' + resolution: + integrity: sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + /performance-now/2.1.0: + dev: true + resolution: + integrity: sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + /picomatch/2.2.2: + dev: true + engines: + node: '>=8.6' + resolution: + integrity: sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + /pify/2.3.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + /pify/4.0.1: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + /pinkie-promise/2.0.1: + dependencies: + pinkie: 2.0.4 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-ITXW36ejWMBprJsXh3YogihFD/o= + /pinkie/2.0.4: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + /pirates/4.0.1: + dependencies: + node-modules-regexp: 1.0.0 + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + /pkg-dir/2.0.0: + dependencies: + find-up: 2.1.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + /pkg-dir/3.0.0: + dependencies: + find-up: 3.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + /pkg-dir/4.2.0: + dependencies: + find-up: 4.1.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + /pkg-up/3.1.0: + dependencies: + find-up: 3.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + /pnp-webpack-plugin/1.6.4_typescript@4.1.5: + dependencies: + ts-pnp: 1.2.0_typescript@4.1.5 + dev: true + engines: + node: '>=6' + peerDependencies: + typescript: '*' + resolution: + integrity: sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== + /portfinder/1.0.28: + dependencies: + async: 2.6.3 + debug: 3.2.7 + mkdirp: 0.5.5 + dev: true + engines: + node: '>= 0.12.0' + resolution: + integrity: sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + /posix-character-classes/0.1.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + /postcss-attribute-case-insensitive/4.0.2: + dependencies: + postcss: 7.0.35 + postcss-selector-parser: 6.0.4 + dev: true + resolution: + integrity: sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA== + /postcss-browser-comments/3.0.0_browserslist@4.16.3: + dependencies: + browserslist: 4.16.3 + postcss: 7.0.35 + dev: true + engines: + node: '>=8.0.0' + peerDependencies: + browserslist: ^4 + resolution: + integrity: sha512-qfVjLfq7HFd2e0HW4s1dvU8X080OZdG46fFbIBFjW7US7YPDcWfRvdElvwMJr2LI6hMmD+7LnH2HcmXTs+uOig== + /postcss-calc/7.0.5: + dependencies: + postcss: 7.0.35 + postcss-selector-parser: 6.0.4 + postcss-value-parser: 4.1.0 + dev: true + resolution: + integrity: sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== + /postcss-color-functional-notation/2.0.1: + dependencies: + postcss: 7.0.35 + postcss-values-parser: 2.0.1 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g== + /postcss-color-gray/5.0.0: + dependencies: + '@csstools/convert-colors': 1.4.0 + postcss: 7.0.35 + postcss-values-parser: 2.0.1 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw== + /postcss-color-hex-alpha/5.0.3: + dependencies: + postcss: 7.0.35 + postcss-values-parser: 2.0.1 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw== + /postcss-color-mod-function/3.0.3: + dependencies: + '@csstools/convert-colors': 1.4.0 + postcss: 7.0.35 + postcss-values-parser: 2.0.1 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ== + /postcss-color-rebeccapurple/4.0.1: + dependencies: + postcss: 7.0.35 + postcss-values-parser: 2.0.1 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g== + /postcss-colormin/4.0.3: + dependencies: + browserslist: 4.16.3 + color: 3.1.3 + has: 1.0.3 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + /postcss-convert-values/4.0.1: + dependencies: + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + /postcss-custom-media/7.0.8: + dependencies: + postcss: 7.0.35 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg== + /postcss-custom-properties/8.0.11: + dependencies: + postcss: 7.0.35 + postcss-values-parser: 2.0.1 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA== + /postcss-custom-selectors/5.1.2: + dependencies: + postcss: 7.0.35 + postcss-selector-parser: 5.0.0 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w== + /postcss-dir-pseudo-class/5.0.0: + dependencies: + postcss: 7.0.35 + postcss-selector-parser: 5.0.0 + dev: true + engines: + node: '>=4.0.0' + resolution: + integrity: sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw== + /postcss-discard-comments/4.0.2: + dependencies: + postcss: 7.0.35 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + /postcss-discard-duplicates/4.0.2: + dependencies: + postcss: 7.0.35 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + /postcss-discard-empty/4.0.1: + dependencies: + postcss: 7.0.35 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + /postcss-discard-overridden/4.0.1: + dependencies: + postcss: 7.0.35 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + /postcss-double-position-gradients/1.0.0: + dependencies: + postcss: 7.0.35 + postcss-values-parser: 2.0.1 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA== + /postcss-env-function/2.0.2: + dependencies: + postcss: 7.0.35 + postcss-values-parser: 2.0.1 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw== + /postcss-flexbugs-fixes/4.2.1: + dependencies: + postcss: 7.0.35 + dev: true + resolution: + integrity: sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ== + /postcss-focus-visible/4.0.0: + dependencies: + postcss: 7.0.35 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g== + /postcss-focus-within/3.0.0: + dependencies: + postcss: 7.0.35 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w== + /postcss-font-variant/4.0.1: + dependencies: + postcss: 7.0.35 + dev: true + resolution: + integrity: sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA== + /postcss-gap-properties/2.0.0: + dependencies: + postcss: 7.0.35 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg== + /postcss-image-set-function/3.0.1: + dependencies: + postcss: 7.0.35 + postcss-values-parser: 2.0.1 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw== + /postcss-initial/3.0.2: + dependencies: + lodash.template: 4.5.0 + postcss: 7.0.35 + dev: true + resolution: + integrity: sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA== + /postcss-lab-function/2.0.1: + dependencies: + '@csstools/convert-colors': 1.4.0 + postcss: 7.0.35 + postcss-values-parser: 2.0.1 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg== + /postcss-load-config/2.1.2: + dependencies: + cosmiconfig: 5.2.1 + import-cwd: 2.1.0 + dev: true + engines: + node: '>= 4' + resolution: + integrity: sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== + /postcss-loader/3.0.0: + dependencies: + loader-utils: 1.4.0 + postcss: 7.0.35 + postcss-load-config: 2.1.2 + schema-utils: 1.0.0 + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== + /postcss-logical/3.0.0: + dependencies: + postcss: 7.0.35 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA== + /postcss-media-minmax/4.0.0: + dependencies: + postcss: 7.0.35 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw== + /postcss-merge-longhand/4.0.11: + dependencies: + css-color-names: 0.0.4 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + stylehacks: 4.0.3 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + /postcss-merge-rules/4.0.3: + dependencies: + browserslist: 4.16.3 + caniuse-api: 3.0.0 + cssnano-util-same-parent: 4.0.1 + postcss: 7.0.35 + postcss-selector-parser: 3.1.2 + vendors: 1.0.4 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + /postcss-minify-font-values/4.0.2: + dependencies: + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + /postcss-minify-gradients/4.0.2: + dependencies: + cssnano-util-get-arguments: 4.0.0 + is-color-stop: 1.1.0 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + /postcss-minify-params/4.0.2: + dependencies: + alphanum-sort: 1.0.2 + browserslist: 4.16.3 + cssnano-util-get-arguments: 4.0.0 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + uniqs: 2.0.0 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + /postcss-minify-selectors/4.0.2: + dependencies: + alphanum-sort: 1.0.2 + has: 1.0.3 + postcss: 7.0.35 + postcss-selector-parser: 3.1.2 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + /postcss-modules-extract-imports/2.0.0: + dependencies: + postcss: 7.0.35 + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== + /postcss-modules-local-by-default/3.0.3: + dependencies: + icss-utils: 4.1.1 + postcss: 7.0.35 + postcss-selector-parser: 6.0.4 + postcss-value-parser: 4.1.0 + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== + /postcss-modules-scope/2.2.0: + dependencies: + postcss: 7.0.35 + postcss-selector-parser: 6.0.4 + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== + /postcss-modules-values/3.0.0: + dependencies: + icss-utils: 4.1.1 + postcss: 7.0.35 + dev: true + resolution: + integrity: sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + /postcss-nesting/7.0.1: + dependencies: + postcss: 7.0.35 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg== + /postcss-normalize-charset/4.0.1: + dependencies: + postcss: 7.0.35 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + /postcss-normalize-display-values/4.0.2: + dependencies: + cssnano-util-get-match: 4.0.0 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + /postcss-normalize-positions/4.0.2: + dependencies: + cssnano-util-get-arguments: 4.0.0 + has: 1.0.3 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + /postcss-normalize-repeat-style/4.0.2: + dependencies: + cssnano-util-get-arguments: 4.0.0 + cssnano-util-get-match: 4.0.0 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + /postcss-normalize-string/4.0.2: + dependencies: + has: 1.0.3 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + /postcss-normalize-timing-functions/4.0.2: + dependencies: + cssnano-util-get-match: 4.0.0 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + /postcss-normalize-unicode/4.0.1: + dependencies: + browserslist: 4.16.3 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + /postcss-normalize-url/4.0.1: + dependencies: + is-absolute-url: 2.1.0 + normalize-url: 3.3.0 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + /postcss-normalize-whitespace/4.0.2: + dependencies: + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + /postcss-normalize/8.0.1: + dependencies: + '@csstools/normalize.css': 10.1.0 + browserslist: 4.16.3 + postcss: 7.0.35 + postcss-browser-comments: 3.0.0_browserslist@4.16.3 + sanitize.css: 10.0.0 + dev: true + engines: + node: '>=8.0.0' + resolution: + integrity: sha512-rt9JMS/m9FHIRroDDBGSMsyW1c0fkvOJPy62ggxSHUldJO7B195TqFMqIf+lY5ezpDcYOV4j86aUp3/XbxzCCQ== + /postcss-ordered-values/4.1.2: + dependencies: + cssnano-util-get-arguments: 4.0.0 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + /postcss-overflow-shorthand/2.0.0: + dependencies: + postcss: 7.0.35 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g== + /postcss-page-break/2.0.0: + dependencies: + postcss: 7.0.35 + dev: true + resolution: + integrity: sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ== + /postcss-place/4.0.1: + dependencies: + postcss: 7.0.35 + postcss-values-parser: 2.0.1 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg== + /postcss-preset-env/6.7.0: + dependencies: + autoprefixer: 9.8.6 + browserslist: 4.16.3 + caniuse-lite: 1.0.30001200 + css-blank-pseudo: 0.1.4 + css-has-pseudo: 0.10.0 + css-prefers-color-scheme: 3.1.1 + cssdb: 4.4.0 + postcss: 7.0.35 + postcss-attribute-case-insensitive: 4.0.2 + postcss-color-functional-notation: 2.0.1 + postcss-color-gray: 5.0.0 + postcss-color-hex-alpha: 5.0.3 + postcss-color-mod-function: 3.0.3 + postcss-color-rebeccapurple: 4.0.1 + postcss-custom-media: 7.0.8 + postcss-custom-properties: 8.0.11 + postcss-custom-selectors: 5.1.2 + postcss-dir-pseudo-class: 5.0.0 + postcss-double-position-gradients: 1.0.0 + postcss-env-function: 2.0.2 + postcss-focus-visible: 4.0.0 + postcss-focus-within: 3.0.0 + postcss-font-variant: 4.0.1 + postcss-gap-properties: 2.0.0 + postcss-image-set-function: 3.0.1 + postcss-initial: 3.0.2 + postcss-lab-function: 2.0.1 + postcss-logical: 3.0.0 + postcss-media-minmax: 4.0.0 + postcss-nesting: 7.0.1 + postcss-overflow-shorthand: 2.0.0 + postcss-page-break: 2.0.0 + postcss-place: 4.0.1 + postcss-pseudo-class-any-link: 6.0.0 + postcss-replace-overflow-wrap: 3.0.0 + postcss-selector-matches: 4.0.0 + postcss-selector-not: 4.0.1 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg== + /postcss-pseudo-class-any-link/6.0.0: + dependencies: + postcss: 7.0.35 + postcss-selector-parser: 5.0.0 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew== + /postcss-reduce-initial/4.0.3: + dependencies: + browserslist: 4.16.3 + caniuse-api: 3.0.0 + has: 1.0.3 + postcss: 7.0.35 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + /postcss-reduce-transforms/4.0.2: + dependencies: + cssnano-util-get-match: 4.0.0 + has: 1.0.3 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + /postcss-replace-overflow-wrap/3.0.0: + dependencies: + postcss: 7.0.35 + dev: true + resolution: + integrity: sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw== + /postcss-safe-parser/5.0.2: + dependencies: + postcss: 8.2.8 + dev: true + engines: + node: '>=10.0' + resolution: + integrity: sha512-jDUfCPJbKOABhwpUKcqCVbbXiloe/QXMcbJ6Iipf3sDIihEzTqRCeMBfRaOHxhBuTYqtASrI1KJWxzztZU4qUQ== + /postcss-selector-matches/4.0.0: + dependencies: + balanced-match: 1.0.0 + postcss: 7.0.35 + dev: true + resolution: + integrity: sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww== + /postcss-selector-not/4.0.1: + dependencies: + balanced-match: 1.0.0 + postcss: 7.0.35 + dev: true + resolution: + integrity: sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ== + /postcss-selector-parser/3.1.2: + dependencies: + dot-prop: 5.3.0 + indexes-of: 1.0.1 + uniq: 1.0.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== + /postcss-selector-parser/5.0.0: + dependencies: + cssesc: 2.0.0 + indexes-of: 1.0.1 + uniq: 1.0.1 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== + /postcss-selector-parser/6.0.4: + dependencies: + cssesc: 3.0.0 + indexes-of: 1.0.1 + uniq: 1.0.1 + util-deprecate: 1.0.2 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== + /postcss-svgo/4.0.2: + dependencies: + is-svg: 3.0.0 + postcss: 7.0.35 + postcss-value-parser: 3.3.1 + svgo: 1.3.2 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== + /postcss-unique-selectors/4.0.1: + dependencies: + alphanum-sort: 1.0.2 + postcss: 7.0.35 + uniqs: 2.0.0 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + /postcss-value-parser/3.3.1: + dev: true + resolution: + integrity: sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + /postcss-value-parser/4.1.0: + dev: true + resolution: + integrity: sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + /postcss-values-parser/2.0.1: + dependencies: + flatten: 1.0.3 + indexes-of: 1.0.1 + uniq: 1.0.1 + dev: true + engines: + node: '>=6.14.4' + resolution: + integrity: sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg== + /postcss/7.0.21: + dependencies: + chalk: 2.4.2 + source-map: 0.6.1 + supports-color: 6.1.0 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ== + /postcss/7.0.35: + dependencies: + chalk: 2.4.2 + source-map: 0.6.1 + supports-color: 6.1.0 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== + /postcss/8.2.8: + dependencies: + colorette: 1.2.2 + nanoid: 3.1.21 + source-map: 0.6.1 + dev: true + engines: + node: ^10 || ^12 || >=14 + resolution: + integrity: sha512-1F0Xb2T21xET7oQV9eKuctbM9S7BC0fetoHCc4H13z0PT6haiRLP4T0ZY4XWh7iLP0usgqykT6p9B2RtOf4FPw== + /prelude-ls/1.1.2: + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + /prelude-ls/1.2.1: + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + /prepend-http/1.0.4: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + /pretty-bytes/5.6.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + /pretty-error/2.1.2: + dependencies: + lodash: 4.17.21 + renderkid: 2.0.5 + dev: true + resolution: + integrity: sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== + /pretty-format/26.6.2: + dependencies: + '@jest/types': 26.6.2 + ansi-regex: 5.0.0 + ansi-styles: 4.3.0 + react-is: 17.0.1 + engines: + node: '>= 10' + resolution: + integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== + /pretty-time/1.1.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== + /process-nextick-args/2.0.1: + dev: true + resolution: + integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + /process/0.11.10: + dev: true + engines: + node: '>= 0.6.0' + resolution: + integrity: sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + /progress/2.0.3: + dev: true + engines: + node: '>=0.4.0' + resolution: + integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + /promise-controller/1.0.0: + dev: false + engines: + node: '>=8' + resolution: + integrity: sha512-goA0zA9L91tuQbUmiMinSYqlyUtEgg4fxJcjYnLYOQnrktb4o4UqciXDNXiRUPiDBPACmsr1k8jDW4r7UDq9Qw== + /promise-inflight/1.0.1: + dev: true + resolution: + integrity: sha1-mEcocL8igTL8vdhoEputEsPAKeM= + /promise.prototype.finally/3.1.2: + dependencies: + define-properties: 1.1.3 + es-abstract: 1.18.0 + function-bind: 1.1.1 + dev: false + engines: + node: '>= 0.4' + resolution: + integrity: sha512-A2HuJWl2opDH0EafgdjwEw7HysI8ff/n4lW4QEVBCUXFk9QeGecBWv0Deph0UmLe3tTNYegz8MOjsVuE6SMoJA== + /promise/8.1.0: + dependencies: + asap: 2.0.6 + dev: true + resolution: + integrity: sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q== + /promised-map/1.0.0: + dev: false + engines: + node: '>=10' + resolution: + integrity: sha512-fP9VSMgcml+U2uJ9PBc4/LDQ3ZkJCH4blLNCS6gbH7RHyRZCYs91zxWHqiUy+heFiEMiB2op/qllYoFqmIqdWA== + /prompts/2.4.0: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== + /prop-types/15.7.2: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + resolution: + integrity: sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + /proxy-addr/2.0.6: + dependencies: + forwarded: 0.1.2 + ipaddr.js: 1.9.1 + dev: true + engines: + node: '>= 0.10' + resolution: + integrity: sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + /prr/1.0.1: + dev: true + resolution: + integrity: sha1-0/wRS6BplaRexok/SEzrHXj19HY= + /psl/1.8.0: + dev: true + resolution: + integrity: sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + /public-encrypt/4.0.3: + dependencies: + bn.js: 4.12.0 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + parse-asn1: 5.1.6 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: true + resolution: + integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + /pump/2.0.1: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + resolution: + integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + /pump/3.0.0: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + resolution: + integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + /pumpify/1.5.1: + dependencies: + duplexify: 3.7.1 + inherits: 2.0.4 + pump: 2.0.1 + dev: true + resolution: + integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + /punycode/1.3.2: + dev: true + resolution: + integrity: sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + /punycode/1.4.1: + dev: true + resolution: + integrity: sha1-wNWmOycYgArY4esPpSachN1BhF4= + /punycode/2.1.1: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + /q/1.5.1: + dev: true + engines: + node: '>=0.6.0' + teleport: '>=0.2.0' + resolution: + integrity: sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + /qs/6.5.2: + dev: true + engines: + node: '>=0.6' + resolution: + integrity: sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + /qs/6.7.0: + dev: true + engines: + node: '>=0.6' + resolution: + integrity: sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + /query-string/4.3.4: + dependencies: + object-assign: 4.1.1 + strict-uri-encode: 1.1.0 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + /querystring-es3/0.2.1: + dev: true + engines: + node: '>=0.4.x' + resolution: + integrity: sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + /querystring/0.2.0: + dev: true + engines: + node: '>=0.4.x' + resolution: + integrity: sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + /querystring/0.2.1: + dev: true + engines: + node: '>=0.4.x' + resolution: + integrity: sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== + /querystringify/2.2.0: + dev: true + resolution: + integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + /queue-microtask/1.2.2: + dev: true + resolution: + integrity: sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg== + /raf/3.4.1: + dependencies: + performance-now: 2.1.0 + dev: true + resolution: + integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + /randombytes/2.1.0: + dependencies: + safe-buffer: 5.2.1 + dev: true + resolution: + integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + /randomfill/1.0.4: + dependencies: + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: true + resolution: + integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + /range-parser/1.2.1: + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + /raw-body/2.4.0: + dependencies: + bytes: 3.1.0 + http-errors: 1.7.2 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: true + engines: + node: '>= 0.8' + resolution: + integrity: sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + /rc-align/4.0.9_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + dom-align: 1.12.0 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + resize-observer-polyfill: 1.5.1 + dev: false + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-myAM2R4qoB6LqBul0leaqY8gFaiECDJ3MtQDmzDo9xM9NRT/04TvWOYd2YHU9zvGzqk9QXF6S9/MifzSKDZeMw== + /rc-cascader/1.4.2_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + array-tree-filter: 2.1.0 + rc-trigger: 5.2.3_react-dom@17.0.1+react@17.0.1 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + warning: 4.0.3 + dev: false + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-JVuLGrSi+3G8DZyPvlKlGVWJjhoi9NTz6REHIgRspa5WnznRkKGm2ejb0jJtz0m2IL8Q9BG4ZA2sXuqAu71ltQ== + /rc-checkbox/2.3.2_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-afVi1FYiGv1U0JlpNH/UaEXdh6WUJjcWokj/nUN2TgG80bfG+MDdbfHKlLcNNba94mbjy2/SXJ1HDgrOkXGAjg== + /rc-collapse/3.1.0_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + rc-motion: 2.4.1_react-dom@17.0.1+react@17.0.1 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + shallowequal: 1.1.0 + dev: false + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-EwpNPJcLe7b+5JfyaxM9ZNnkCgqArt3QQO0Cr5p5plwz/C9h8liAmjYY5I4+hl9lAjBqb7ZwLu94+z+rt5g1WQ== + /rc-dialog/8.5.2_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + rc-motion: 2.4.1_react-dom@17.0.1+react@17.0.1 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-3n4taFcjqhTE9uNuzjB+nPDeqgRBTEGBfe46mb1e7r88DgDo0lL4NnxY/PZ6PJKd2tsCt+RrgF/+YeTvJ/Thsw== + /rc-drawer/4.3.1_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-GMfFy4maqxS9faYXEhQ+0cA1xtkddEQzraf6SAdzWbn444DrrLogwYPk1NXSpdXjLCLxgxOj9MYtyYG42JsfXg== + /rc-dropdown/3.2.0_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + rc-trigger: 5.2.3_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + peerDependencies: + react: '*' + react-dom: '*' + resolution: + integrity: sha512-j1HSw+/QqlhxyTEF6BArVZnTmezw2LnSmRk6I9W7BCqNCKaRwleRmMMs1PHbuaG8dKHVqP6e21RQ7vPBLVnnNw== + /rc-field-form/1.20.0_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + async-validator: 3.5.1 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + engines: + node: '>=8.x' + peerDependencies: + react: '>= 16.9.0' + react-dom: '>= 16.9.0' + resolution: + integrity: sha512-jkzsIfXR7ywEYdeAtktt1aLff88wxIPDLpq7KShHNl4wlsWrCE+TzkXBfjvVzYOVZt5GGrD8YDqNO/q6eaR/eA== + /rc-image/5.2.3_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + rc-dialog: 8.5.2_react-dom@17.0.1+react@17.0.1 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-8qWNerW1rN0s4zAF6oEa+Zm7UzM+PwTxbGdufvnR3Gcp2M0bcfoEPk9V+RgTxmzGNNELxmrMHloPL4LV5BZu3Q== + /rc-input-number/7.0.2_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-9AcD3/D18Oa41xZnBFvJ0fdp6AJkf/en8uKi8E69Ct+sh64qIYbWUXeh1PXhJgrCHIoNNT8OWaTebypT4/d3ZA== + /rc-mentions/1.5.3_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + rc-menu: 8.10.6_react-dom@17.0.1+react@17.0.1 + rc-textarea: 0.3.4_react-dom@17.0.1+react@17.0.1 + rc-trigger: 5.2.3_react-dom@17.0.1+react@17.0.1 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-NG/KB8YiKBCJPHHvr/QapAb4f9YzLJn7kDHtmI1K6t7ZMM5YgrjIxNNhoRKKP9zJvb9PdPts69Hbg4ZMvLVIFQ== + /rc-menu/8.10.6_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + mini-store: 3.0.6_react-dom@17.0.1+react@17.0.1 + rc-motion: 2.4.1_react-dom@17.0.1+react@17.0.1 + rc-trigger: 5.2.3_react-dom@17.0.1+react@17.0.1 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + resize-observer-polyfill: 1.5.1 + shallowequal: 1.1.0 + dev: false + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-RVkd8XChwSmVOdNULbqLNnABthRZWnhqct1Q74onEXTClsXvsLADMhlIJtw/umglVSECM+14TJdIli9rl2Bzlw== + /rc-motion/2.4.1_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-TWLvymfMu8SngPx5MDH8dQ0D2RYbluNTfam4hY/dNNx9RQ3WtGuZ/GXHi2ymLMzH+UNd6EEFYkOuR5JTTtm8Xg== + /rc-notification/4.5.5_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + rc-motion: 2.4.1_react-dom@17.0.1+react@17.0.1 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + engines: + node: '>=8.x' + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-YIfhTSw+h5GsSdgMnuMx24wqiPlg3FeamuOlkh9RkyHx+SeZVAKzQ0juy2NGvPEF2hDWi5xTqxUqLdo0L2AmGg== + /rc-overflow/1.0.2_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + rc-resize-observer: 1.0.0_react-dom@17.0.1+react@17.0.1 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-GXj4DAyNxm4f57LvXLwhJaZoJHzSge2l2lQq64MZP7NJAfLpQqOLD+v9JMV9ONTvDPZe8kdzR+UMmkAn7qlzFA== + /rc-pagination/3.1.6_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-Pb2zJEt8uxXzYCWx/2qwsYZ3vSS9Eqdw0cJBli6C58/iYhmvutSBqrBJh51Z5UzYc5ZcW5CMeP5LbbKE1J3rpw== + /rc-picker/2.5.10_89622fd8e4ec221151a62783d49305af: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + date-fns: 2.19.0 + dayjs: 1.10.4 + moment: 2.29.1 + rc-trigger: 5.2.3_react-dom@17.0.1+react@17.0.1 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + shallowequal: 1.1.0 + dev: false + engines: + node: '>=8.x' + peerDependencies: + dayjs: ^1.8.30 + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-d2or2jql9SSY8CaRPybpbKkXBq3bZ6g88UKyWQZBLTCrc92Xm87RfRC/P3UEQo/CLmia3jVF7IXVi1HmNe2DZA== + /rc-progress/3.1.3_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-Jl4fzbBExHYMoC6HBPzel0a9VmhcSXx24LVt/mdhDM90MuzoMCJjXZAlhA0V0CJi+SKjMhfBoIQ6Lla1nD4QNw== + /rc-rate/2.9.1_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + engines: + node: '>=8.x' + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-MmIU7FT8W4LYRRHJD1sgG366qKtSaKb67D0/vVvJYR0lrCuRrCiVQ5qhfT5ghVO4wuVIORGpZs7ZKaYu+KMUzA== + /rc-resize-observer/1.0.0_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + resize-observer-polyfill: 1.5.1 + dev: false + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-RgKGukg1mlzyGdvzF7o/LGFC8AeoMH9aGzXTUdp6m+OApvmRdUuOscq/Y2O45cJA+rXt1ApWlpFoOIioXL3AGg== + /rc-select/12.1.6_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + rc-motion: 2.4.1_react-dom@17.0.1+react@17.0.1 + rc-overflow: 1.0.2_react-dom@17.0.1+react@17.0.1 + rc-trigger: 5.2.3_react-dom@17.0.1+react@17.0.1 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + rc-virtual-list: 3.2.6_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + engines: + node: '>=8.x' + peerDependencies: + react: '*' + react-dom: '*' + resolution: + integrity: sha512-lsS95CUCRUObLcZvBecAdLS8RcIQQOuWC+A+xJOogvQJFEqIx4o8bcRH9OOob8eGKg7F84dKEz0hYUSEknwwew== + /rc-slider/9.7.1_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + rc-tooltip: 5.1.0_react-dom@17.0.1+react@17.0.1 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + shallowequal: 1.1.0 + dev: false + engines: + node: '>=8.x' + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-r9r0dpFA3PEvxBhIfVi1lVzxuSogWxeY+tGvi2AqMM1rPgaOXQ7WbtT+9kVFkJ9K8TntA/vYPgiCCKfN29KTkw== + /rc-steps/4.1.3_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + engines: + node: '>=8.x' + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-GXrMfWQOhN3sVze3JnzNboHpQdNHcdFubOETUHyDpa/U3HEKBZC3xJ8XK4paBgF4OJ3bdUVLC+uBPc6dCxvDYA== + /rc-switch/3.2.2_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-+gUJClsZZzvAHGy1vZfnwySxj+MjLlGRyXKXScrtCTcmiYNPzxDFOxdQ/3pK1Kt/0POvwJ/6ALOR8gwdXGhs+A== + /rc-table/7.13.2_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + rc-resize-observer: 1.0.0_react-dom@17.0.1+react@17.0.1 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + shallowequal: 1.1.0 + dev: false + engines: + node: '>=8.x' + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-KWYSGpWPAxX7PBIhxlkVo7XvoT3ZjPnDorm95NubK6udxxs0hDwzuQDqNJ2iiNuimSZj1FL+27aE606eobS96w== + /rc-tabs/11.7.3_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + rc-dropdown: 3.2.0_react-dom@17.0.1+react@17.0.1 + rc-menu: 8.10.6_react-dom@17.0.1+react@17.0.1 + rc-resize-observer: 1.0.0_react-dom@17.0.1+react@17.0.1 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + engines: + node: '>=8.x' + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-5nd2NVss9TprPRV9r8N05SjQyAE7zDrLejxFLcbJ+BdLxSwnGnk3ws/Iq0smqKZUnPQC0XEvnpF3+zlllUUT2w== + /rc-textarea/0.3.4_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + rc-resize-observer: 1.0.0_react-dom@17.0.1+react@17.0.1 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-ILUYx831ZukQPv3m7R4RGRtVVWmL1LV4ME03L22mvT56US0DGCJJaRTHs4vmpcSjFHItph5OTmhodY4BOwy81A== + /rc-tooltip/5.1.0_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + rc-trigger: 5.2.3_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-pFqD1JZwNIpbdcefB7k5xREoHAWM/k3yQwYF0iminbmDXERgq4rvBfUwIvlCqqZSM7HDr9hYeYr6ZsVNaKtvCQ== + /rc-tree-select/4.3.0_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + rc-select: 12.1.6_react-dom@17.0.1+react@17.0.1 + rc-tree: 4.1.5_react-dom@17.0.1+react@17.0.1 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + peerDependencies: + react: '*' + react-dom: '*' + resolution: + integrity: sha512-EEXB9dKBsJNJuKIU5NERZsaJ71GDGIj5uWLl7A4XiYr2jXM4JICfScvvp3O5jHMDfhqmgpqNc0z90mHkgh3hKg== + /rc-tree/4.1.5_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + rc-motion: 2.4.1_react-dom@17.0.1+react@17.0.1 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + rc-virtual-list: 3.2.6_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + engines: + node: '>=8.x' + peerDependencies: + react: '*' + react-dom: '*' + resolution: + integrity: sha512-q2vjcmnBDylGZ9/ZW4F9oZMKMJdbFWC7um+DAQhZG1nqyg1iwoowbBggUDUaUOEryJP+08bpliEAYnzJXbI5xQ== + /rc-trigger/5.2.3_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + rc-align: 4.0.9_react-dom@17.0.1+react@17.0.1 + rc-motion: 2.4.1_react-dom@17.0.1+react@17.0.1 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + engines: + node: '>=8.x' + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-6Fokao07HUbqKIDkDRFEM0AGZvsvK0Fbp8A/KFgl1ngaqfO1nY037cISCG1Jm5fxImVsXp9awdkP7Vu5cxjjog== + /rc-upload/4.2.0-alpha.0_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + classnames: 2.2.6 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-44mVeg9+FwcHVLheYovApS/Q676/dHglRbb9vEYcgqGoR0poP0ssYZ9mtmKxdgr2g5EJe7nGFljbfnyEmluCqQ== + /rc-util/5.8.1_react-dom@17.0.1+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + react-is: 16.13.1 + shallowequal: 1.1.0 + dev: false + peerDependencies: + react: '>=16.9.0' + react-dom: '>=16.9.0' + resolution: + integrity: sha512-kXV/QjL+azh3AxMk68gm8+nltVoL6bjeJJULAZLRCLus2Fhvo/aaMZokxYov/E0dbfjo31I78pF4yVljqQB7bA== + /rc-virtual-list/3.2.6_react-dom@17.0.1+react@17.0.1: + dependencies: + classnames: 2.2.6 + rc-resize-observer: 1.0.0_react-dom@17.0.1+react@17.0.1 + rc-util: 5.8.1_react-dom@17.0.1+react@17.0.1 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + engines: + node: '>=8.x' + peerDependencies: + react: '*' + react-dom: '*' + resolution: + integrity: sha512-8FiQLDzm3c/tMX0d62SQtKDhLH7zFlSI6pWBAPt+TUntEqd3Lz9zFAmpvTu8gkvUom/HCsDSZs4wfV4wDPWC0Q== + /react-app-polyfill/2.0.0: + dependencies: + core-js: 3.9.1 + object-assign: 4.1.1 + promise: 8.1.0 + raf: 3.4.1 + regenerator-runtime: 0.13.7 + whatwg-fetch: 3.6.2 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-0sF4ny9v/B7s6aoehwze9vJNWcmCemAUYBVasscVr92+UYiEqDXOxfKjXN685mDaMRNF3WdhHQs76oTODMocFA== + /react-chartjs-2/2.11.1_6c446a34f83b2a92e3214f8b711c141a: + dependencies: + chart.js: 2.9.4 + lodash: 4.17.21 + prop-types: 15.7.2 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + peerDependencies: + chart.js: ^2.3 + react: ^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + react-dom: ^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + resolution: + integrity: sha512-G7cNq/n2Bkh/v4vcI+GKx7Q1xwZexKYhOSj2HmrFXlvNeaURWXun6KlOUpEQwi1cv9Tgs4H3kGywDWMrX2kxfA== + /react-dev-utils/11.0.4: + dependencies: + '@babel/code-frame': 7.10.4 + address: 1.1.2 + browserslist: 4.14.2 + chalk: 2.4.2 + cross-spawn: 7.0.3 + detect-port-alt: 1.1.6 + escape-string-regexp: 2.0.0 + filesize: 6.1.0 + find-up: 4.1.0 + fork-ts-checker-webpack-plugin: 4.1.6 + global-modules: 2.0.0 + globby: 11.0.1 + gzip-size: 5.1.1 + immer: 8.0.1 + is-root: 2.1.0 + loader-utils: 2.0.0 + open: 7.4.2 + pkg-up: 3.1.0 + prompts: 2.4.0 + react-error-overlay: 6.0.9 + recursive-readdir: 2.2.2 + shell-quote: 1.7.2 + strip-ansi: 6.0.0 + text-table: 0.2.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A== + /react-dom/17.0.1_react@17.0.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react: 17.0.1 + scheduler: 0.20.1 + dev: false + peerDependencies: + react: 17.0.1 + resolution: + integrity: sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug== + /react-error-overlay/6.0.9: + dev: true + resolution: + integrity: sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== + /react-file-drop/3.1.2_react-dom@17.0.1+react@17.0.1: + dependencies: + prop-types: 15.7.2 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + dev: false + peerDependencies: + react: ^16.13.1 + react-dom: ^16.13.1 + resolution: + integrity: sha512-fhujAloK9AIDzu18ltGrYe8Pk9NuXdCc8MrFgLNPJJS22B/GdTwD7Pz4BCCUiX+4sFZr42L4AZM7RsJN2xu1BQ== + /react-hotkeys/2.0.0_react@17.0.1: + dependencies: + prop-types: 15.7.2 + react: 17.0.1 + dev: false + peerDependencies: + react: '>= 0.14.0' + resolution: + integrity: sha512-3n3OU8vLX/pfcJrR3xJ1zlww6KS1kEJt0Whxc4FiGV+MJrQ1mYSYI3qS/11d2MJDFm8IhOXMTFQirfu6AVOF6Q== + /react-i18next/11.8.10_i18next@19.9.2+react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + html-parse-stringify2: 2.0.1 + i18next: 19.9.2 + react: 17.0.1 + dev: false + peerDependencies: + i18next: '>= 19.0.0' + react: '>= 16.8.0' + resolution: + integrity: sha512-ckjNzMjYkmx4fQ8zzuaYTosYN3Co6ebrgCQJzuZCcGFYSR/kGHZzSu0xw9VhtnbjJVKx0gEMV3DLRvzi4xDZUw== + /react-is/16.13.1: + resolution: + integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + /react-is/17.0.1: + resolution: + integrity: sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== + /react-redux/7.2.2_380dc38591053d98779d1f25fc7202b9: + dependencies: + '@babel/runtime': 7.13.10 + hoist-non-react-statics: 3.3.2 + loose-envify: 1.4.0 + prop-types: 15.7.2 + react: 17.0.1 + react-dom: 17.0.1_react@17.0.1 + react-is: 16.13.1 + redux: 4.0.5 + dev: false + peerDependencies: + react: ^16.8.3 || ^17 + react-dom: '*' + react-native: '*' + redux: ^2.0.0 || ^3.0.0 || ^4.0.0-0 + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + resolution: + integrity: sha512-8+CQ1EvIVFkYL/vu6Olo7JFLWop1qRUeb46sGtIMDCSpgwPQq8fPLpirIB0iTqFe9XYEFPHssdX8/UwN6pAkEA== + /react-refresh/0.8.3: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg== + /react-refresh/0.9.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ== + /react-router-dom/5.2.0_react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + history: 4.10.1 + loose-envify: 1.4.0 + prop-types: 15.7.2 + react: 17.0.1 + react-router: 5.2.0_react@17.0.1 + tiny-invariant: 1.1.0 + tiny-warning: 1.0.3 + dev: false + peerDependencies: + react: '>=15' + resolution: + integrity: sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA== + /react-router/5.2.0_react@17.0.1: + dependencies: + '@babel/runtime': 7.13.10 + history: 4.10.1 + hoist-non-react-statics: 3.3.2 + loose-envify: 1.4.0 + mini-create-react-context: 0.4.1_prop-types@15.7.2+react@17.0.1 + path-to-regexp: 1.8.0 + prop-types: 15.7.2 + react: 17.0.1 + react-is: 16.13.1 + tiny-invariant: 1.1.0 + tiny-warning: 1.0.3 + dev: false + peerDependencies: + react: '>=15' + resolution: + integrity: sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw== + /react-scripts/4.0.3_react@17.0.1+typescript@4.1.5: + dependencies: + '@babel/core': 7.12.3 + '@pmmmwh/react-refresh-webpack-plugin': 0.4.3_9f0995138d24e525eb86c097d82409c0 + '@svgr/webpack': 5.5.0 + '@typescript-eslint/eslint-plugin': 4.17.0_5999a92f4ea517bc2e240e03c336061d + '@typescript-eslint/parser': 4.17.0_eslint@7.22.0+typescript@4.1.5 + babel-eslint: 10.1.0_eslint@7.22.0 + babel-jest: 26.6.3_@babel+core@7.12.3 + babel-loader: 8.1.0_427212bc1158d185e577033f19ca0757 + babel-plugin-named-asset-import: 0.3.7_@babel+core@7.12.3 + babel-preset-react-app: 10.0.0 + bfj: 7.0.2 + camelcase: 6.2.0 + case-sensitive-paths-webpack-plugin: 2.3.0 + css-loader: 4.3.0_webpack@4.44.2 + dotenv: 8.2.0 + dotenv-expand: 5.1.0 + eslint: 7.22.0 + eslint-config-react-app: 6.0.0_5bfa359da3fb2923202453652d4fbef5 + eslint-plugin-flowtype: 5.4.0_eslint@7.22.0 + eslint-plugin-import: 2.22.1_eslint@7.22.0 + eslint-plugin-jest: 24.3.1_fd944d5523a3c56434442ccecc6343c4 + eslint-plugin-jsx-a11y: 6.4.1_eslint@7.22.0 + eslint-plugin-react: 7.22.0_eslint@7.22.0 + eslint-plugin-react-hooks: 4.2.0_eslint@7.22.0 + eslint-plugin-testing-library: 3.10.1_eslint@7.22.0+typescript@4.1.5 + eslint-webpack-plugin: 2.5.2_eslint@7.22.0+webpack@4.44.2 + file-loader: 6.1.1_webpack@4.44.2 + fs-extra: 9.1.0 + html-webpack-plugin: 4.5.0_webpack@4.44.2 + identity-obj-proxy: 3.0.0 + jest: 26.6.0 + jest-circus: 26.6.0 + jest-resolve: 26.6.0 + jest-watch-typeahead: 0.6.1_jest@26.6.0 + mini-css-extract-plugin: 0.11.3_webpack@4.44.2 + optimize-css-assets-webpack-plugin: 5.0.4_webpack@4.44.2 + pnp-webpack-plugin: 1.6.4_typescript@4.1.5 + postcss-flexbugs-fixes: 4.2.1 + postcss-loader: 3.0.0 + postcss-normalize: 8.0.1 + postcss-preset-env: 6.7.0 + postcss-safe-parser: 5.0.2 + prompts: 2.4.0 + react: 17.0.1 + react-app-polyfill: 2.0.0 + react-dev-utils: 11.0.4 + react-refresh: 0.8.3 + resolve: 1.18.1 + resolve-url-loader: 3.1.2 + sass-loader: 10.1.1_webpack@4.44.2 + semver: 7.3.2 + style-loader: 1.3.0_webpack@4.44.2 + terser-webpack-plugin: 4.2.3_webpack@4.44.2 + ts-pnp: 1.2.0_typescript@4.1.5 + typescript: 4.1.5 + url-loader: 4.1.1_file-loader@6.1.1+webpack@4.44.2 + webpack: 4.44.2 + webpack-dev-server: 3.11.1_webpack@4.44.2 + webpack-manifest-plugin: 2.2.0_webpack@4.44.2 + workbox-webpack-plugin: 5.1.4_webpack@4.44.2 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + peerDependencies: + react: '>= 16' + typescript: ^3.2.1 || ^4 + peerDependenciesMeta: + typescript: + optional: true + resolution: + integrity: sha512-S5eO4vjUzUisvkIPB7jVsKtuH2HhWcASREYWHAQ1FP5HyCv3xgn+wpILAEWkmy+A+tTNbSZClhxjT3qz6g4L1A== + /react-timeago/5.2.0_react@17.0.1: + dependencies: + react: 17.0.1 + dev: false + peerDependencies: + react: ^16.0.0 + resolution: + integrity: sha512-wCEEDGQHMdFh/PLp+Hj5vk9ZoC4KjQ5u0u6+KrrY9rny5LqJ2gZvNNEAS4mhSZDV1i7JLgQI5VQTAux7f+vj2w== + /react-world-flags/1.4.0_react@17.0.1: + dependencies: + react: 17.0.1 + svg-country-flags: 1.2.10 + world-countries: 4.0.0 + dev: false + peerDependencies: + react: '>=0.14' + resolution: + integrity: sha512-SkOzl/v6LYBphJNSeeQXTogAiLZN1Yy2HFx2Qjda/82MCWFimj9cenmOXASbfbKeqFbo/17M8HauY6mfzWmTDw== + /react/17.0.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w== + /read-pkg-up/2.0.0: + dependencies: + find-up: 2.1.0 + read-pkg: 2.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + /read-pkg-up/7.0.1: + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + /read-pkg/2.0.0: + dependencies: + load-json-file: 2.0.0 + normalize-package-data: 2.5.0 + path-type: 2.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + /read-pkg/5.2.0: + dependencies: + '@types/normalize-package-data': 2.4.0 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + /readable-stream/2.3.7: + dependencies: + core-util-is: 1.0.2 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: true + resolution: + integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + /readable-stream/3.6.0: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + /readdirp/2.2.1: + dependencies: + graceful-fs: 4.2.6 + micromatch: 3.1.10 + readable-stream: 2.3.7 + dev: true + engines: + node: '>=0.10' + resolution: + integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + /readdirp/3.5.0: + dependencies: + picomatch: 2.2.2 + dev: true + engines: + node: '>=8.10.0' + optional: true + resolution: + integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + /recursive-readdir/2.2.2: + dependencies: + minimatch: 3.0.4 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + /redent/3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + dev: false + engines: + node: '>=8' + resolution: + integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + /redux-devtools-extension/2.13.9_redux@4.0.5: + dependencies: + redux: 4.0.5 + dev: true + peerDependencies: + redux: ^3.1.0 || ^4.0.0 + resolution: + integrity: sha512-cNJ8Q/EtjhQaZ71c8I9+BPySIBVEKssbPpskBfsXqb8HJ002A3KRVHfeRzwRo6mGPqsm7XuHTqNSNeS1Khig0A== + /redux/4.0.5: + dependencies: + loose-envify: 1.4.0 + symbol-observable: 1.2.0 + resolution: + integrity: sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w== + /regenerate-unicode-properties/8.2.0: + dependencies: + regenerate: 1.4.2 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + /regenerate/1.4.2: + dev: true + resolution: + integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + /regenerator-runtime/0.11.1: + dev: true + resolution: + integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + /regenerator-runtime/0.13.7: + resolution: + integrity: sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + /regenerator-transform/0.14.5: + dependencies: + '@babel/runtime': 7.13.10 + dev: true + resolution: + integrity: sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + /regex-not/1.0.2: + dependencies: + extend-shallow: 3.0.2 + safe-regex: 1.1.0 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + /regex-parser/2.2.11: + dev: true + resolution: + integrity: sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== + /regexp.prototype.flags/1.3.1: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== + /regexpp/3.1.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + /regexpu-core/4.7.1: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 8.2.0 + regjsgen: 0.5.2 + regjsparser: 0.6.7 + unicode-match-property-ecmascript: 1.0.4 + unicode-match-property-value-ecmascript: 1.2.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== + /regjsgen/0.5.2: + dev: true + resolution: + integrity: sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + /regjsparser/0.6.7: + dependencies: + jsesc: 0.5.0 + dev: true + hasBin: true + resolution: + integrity: sha512-ib77G0uxsA2ovgiYbCVGx4Pv3PSttAx2vIwidqQzbL2U5S4Q+j00HdSAneSBuyVcMvEnTXMjiGgB+DlXozVhpQ== + /relateurl/0.2.7: + dev: true + engines: + node: '>= 0.10' + resolution: + integrity: sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + /remove-trailing-separator/1.1.0: + dev: true + resolution: + integrity: sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + /renderkid/2.0.5: + dependencies: + css-select: 2.1.0 + dom-converter: 0.2.0 + htmlparser2: 3.10.1 + lodash: 4.17.21 + strip-ansi: 3.0.1 + dev: true + resolution: + integrity: sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ== + /repeat-element/1.1.3: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + /repeat-string/1.6.1: + dev: true + engines: + node: '>=0.10' + resolution: + integrity: sha1-jcrkcOHIirwtYA//Sndihtp15jc= + /request-promise-core/1.1.4_request@2.88.2: + dependencies: + lodash: 4.17.21 + request: 2.88.2 + dev: true + engines: + node: '>=0.10.0' + peerDependencies: + request: ^2.34 + resolution: + integrity: sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== + /request-promise-native/1.0.9_request@2.88.2: + dependencies: + request: 2.88.2 + request-promise-core: 1.1.4_request@2.88.2 + stealthy-require: 1.1.1 + tough-cookie: 2.5.0 + deprecated: request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142 + dev: true + engines: + node: '>=0.12.0' + peerDependencies: + request: ^2.34 + resolution: + integrity: sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== + /request/2.88.2: + dependencies: + aws-sign2: 0.7.0 + aws4: 1.11.0 + caseless: 0.12.0 + combined-stream: 1.0.8 + extend: 3.0.2 + forever-agent: 0.6.1 + form-data: 2.3.3 + har-validator: 5.1.5 + http-signature: 1.2.0 + is-typedarray: 1.0.0 + isstream: 0.1.2 + json-stringify-safe: 5.0.1 + mime-types: 2.1.29 + oauth-sign: 0.9.0 + performance-now: 2.1.0 + qs: 6.5.2 + safe-buffer: 5.2.1 + tough-cookie: 2.5.0 + tunnel-agent: 0.6.0 + uuid: 3.4.0 + deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + /require-directory/2.1.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + /require-from-string/2.0.2: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + /require-main-filename/2.0.0: + dev: true + resolution: + integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + /require-package-name/2.0.1: + dev: true + resolution: + integrity: sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk= + /requires-port/1.0.0: + dev: true + resolution: + integrity: sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + /resize-observer-polyfill/1.5.1: + dev: false + resolution: + integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + /resolve-cwd/2.0.0: + dependencies: + resolve-from: 3.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + /resolve-cwd/3.0.0: + dependencies: + resolve-from: 5.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + /resolve-from/3.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-six699nWiBvItuZTM17rywoYh0g= + /resolve-from/4.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + /resolve-from/5.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + /resolve-pathname/3.0.0: + dev: false + resolution: + integrity: sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== + /resolve-url-loader/3.1.2: + dependencies: + adjust-sourcemap-loader: 3.0.0 + camelcase: 5.3.1 + compose-function: 3.0.3 + convert-source-map: 1.7.0 + es6-iterator: 2.0.3 + loader-utils: 1.2.3 + postcss: 7.0.21 + rework: 1.0.1 + rework-visit: 1.0.0 + source-map: 0.6.1 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ== + /resolve-url/0.2.1: + deprecated: https://github.com/lydell/resolve-url#deprecated + dev: true + resolution: + integrity: sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + /resolve/1.18.1: + dependencies: + is-core-module: 2.2.0 + path-parse: 1.0.6 + dev: true + resolution: + integrity: sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA== + /resolve/1.19.0: + dependencies: + is-core-module: 2.2.0 + path-parse: 1.0.6 + dev: true + resolution: + integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== + /resolve/1.20.0: + dependencies: + is-core-module: 2.2.0 + path-parse: 1.0.6 + dev: true + resolution: + integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + /ret/0.1.15: + dev: true + engines: + node: '>=0.12' + resolution: + integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + /retry/0.12.0: + dev: true + engines: + node: '>= 4' + resolution: + integrity: sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + /reusify/1.0.4: + dev: true + engines: + iojs: '>=1.0.0' + node: '>=0.10.0' + resolution: + integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + /rework-visit/1.0.0: + dev: true + resolution: + integrity: sha1-mUWygD8hni96ygCtuLyfZA+ELJo= + /rework/1.0.1: + dependencies: + convert-source-map: 0.3.5 + css: 2.2.4 + dev: true + resolution: + integrity: sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc= + /rgb-regex/1.0.1: + dev: true + resolution: + integrity: sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + /rgba-regex/1.0.0: + dev: true + resolution: + integrity: sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + /rimraf/2.7.1: + dependencies: + glob: 7.1.6 + dev: true + hasBin: true + resolution: + integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + /rimraf/3.0.2: + dependencies: + glob: 7.1.6 + dev: true + hasBin: true + resolution: + integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + /ripemd160/2.0.2: + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + dev: true + resolution: + integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + /rollup-plugin-babel/4.4.0_@babel+core@7.12.3+rollup@1.32.1: + dependencies: + '@babel/core': 7.12.3 + '@babel/helper-module-imports': 7.12.13 + rollup: 1.32.1 + rollup-pluginutils: 2.8.2 + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-babel. + dev: true + peerDependencies: + '@babel/core': 7 || ^7.0.0-rc.2 + rollup: '>=0.60.0 <3' + resolution: + integrity: sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw== + /rollup-plugin-terser/5.3.1_rollup@1.32.1: + dependencies: + '@babel/code-frame': 7.12.13 + jest-worker: 24.9.0 + rollup: 1.32.1 + rollup-pluginutils: 2.8.2 + serialize-javascript: 4.0.0 + terser: 4.8.0 + dev: true + peerDependencies: + rollup: '>=0.66.0 <3' + resolution: + integrity: sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w== + /rollup-pluginutils/2.8.2: + dependencies: + estree-walker: 0.6.1 + dev: true + resolution: + integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== + /rollup/1.32.1: + dependencies: + '@types/estree': 0.0.46 + '@types/node': 14.14.34 + acorn: 7.4.1 + dev: true + hasBin: true + resolution: + integrity: sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A== + /rsvp/4.8.5: + dev: true + engines: + node: 6.* || >= 7.* + resolution: + integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + /run-parallel/1.2.0: + dependencies: + queue-microtask: 1.2.2 + dev: true + resolution: + integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + /run-queue/1.0.3: + dependencies: + aproba: 1.2.0 + dev: true + resolution: + integrity: sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + /safe-buffer/5.1.2: + dev: true + resolution: + integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + /safe-buffer/5.2.1: + dev: true + resolution: + integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + /safe-regex/1.1.0: + dependencies: + ret: 0.1.15 + dev: true + resolution: + integrity: sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + /safer-buffer/2.1.2: + dev: true + resolution: + integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + /sane/4.1.0: + dependencies: + '@cnakazawa/watch': 1.0.4 + anymatch: 2.0.0 + capture-exit: 2.0.0 + exec-sh: 0.3.4 + execa: 1.0.0 + fb-watchman: 2.0.1 + micromatch: 3.1.10 + minimist: 1.2.5 + walker: 1.0.7 + dev: true + engines: + node: 6.* || 8.* || >= 10.* + hasBin: true + resolution: + integrity: sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + /sanitize.css/10.0.0: + dev: true + resolution: + integrity: sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg== + /sass-loader/10.1.1_webpack@4.44.2: + dependencies: + klona: 2.0.4 + loader-utils: 2.0.0 + neo-async: 2.6.2 + schema-utils: 3.0.0 + semver: 7.3.4 + webpack: 4.44.2 + dev: true + engines: + node: '>= 10.13.0' + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^4.0.0 || ^5.0.0 + sass: ^1.3.0 + webpack: ^4.36.0 || ^5.0.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + resolution: + integrity: sha512-W6gVDXAd5hR/WHsPicvZdjAWHBcEJ44UahgxcIE196fW2ong0ZHMPO1kZuI5q0VlvMQZh32gpv69PLWQm70qrw== + /sax/1.2.4: + dev: true + resolution: + integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + /saxes/5.0.1: + dependencies: + xmlchars: 2.2.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + /scheduler/0.20.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + dev: false + resolution: + integrity: sha512-LKTe+2xNJBNxu/QhHvDR14wUXHRQbVY5ZOYpOGWRzhydZUqrLb2JBvLPY7cAqFmqrWuDED0Mjk7013SZiOz6Bw== + /schema-utils/1.0.0: + dependencies: + ajv: 6.12.6 + ajv-errors: 1.0.1_ajv@6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + dev: true + engines: + node: '>= 4' + resolution: + integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + /schema-utils/2.7.1: + dependencies: + '@types/json-schema': 7.0.7 + ajv: 6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + dev: true + engines: + node: '>= 8.9.0' + resolution: + integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + /schema-utils/3.0.0: + dependencies: + '@types/json-schema': 7.0.7 + ajv: 6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + dev: true + engines: + node: '>= 10.13.0' + resolution: + integrity: sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== + /scroll-into-view-if-needed/2.2.27: + dependencies: + compute-scroll-into-view: 1.0.17 + dev: false + resolution: + integrity: sha512-BKiRstRm4u1bZvw+Wu9TxXhyMZ9fskb/9fbuSGuRzwHhlbKlDetL4dBdYaPfQbEFTttQmpkNtFH7sQpk4rZf9w== + /select-hose/2.0.0: + dev: true + resolution: + integrity: sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + /selfsigned/1.10.8: + dependencies: + node-forge: 0.10.0 + dev: true + resolution: + integrity: sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== + /semver/5.7.1: + dev: true + hasBin: true + resolution: + integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + /semver/6.3.0: + dev: true + hasBin: true + resolution: + integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + /semver/7.0.0: + dev: true + hasBin: true + resolution: + integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + /semver/7.3.2: + dev: true + engines: + node: '>=10' + hasBin: true + resolution: + integrity: sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + /semver/7.3.4: + dependencies: + lru-cache: 6.0.0 + engines: + node: '>=10' + hasBin: true + resolution: + integrity: sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + /send/0.17.1: + dependencies: + debug: 2.6.9 + depd: 1.1.2 + destroy: 1.0.4 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 1.7.3 + mime: 1.6.0 + ms: 2.1.1 + on-finished: 2.3.0 + range-parser: 1.2.1 + statuses: 1.5.0 + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + /serialize-javascript/4.0.0: + dependencies: + randombytes: 2.1.0 + dev: true + resolution: + integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + /serialize-javascript/5.0.1: + dependencies: + randombytes: 2.1.0 + dev: true + resolution: + integrity: sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + /serve-index/1.9.1: + dependencies: + accepts: 1.3.7 + batch: 0.6.1 + debug: 2.6.9 + escape-html: 1.0.3 + http-errors: 1.6.3 + mime-types: 2.1.29 + parseurl: 1.3.3 + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + /serve-static/1.14.1: + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.17.1 + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + /set-blocking/2.0.0: + dev: true + resolution: + integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + /set-value/2.0.1: + dependencies: + extend-shallow: 2.0.1 + is-extendable: 0.1.1 + is-plain-object: 2.0.4 + split-string: 3.1.0 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + /setimmediate/1.0.5: + dev: true + resolution: + integrity: sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + /setprototypeof/1.1.0: + dev: true + resolution: + integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + /setprototypeof/1.1.1: + dev: true + resolution: + integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + /sha.js/2.4.11: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + hasBin: true + resolution: + integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + /shallowequal/1.1.0: + dev: false + resolution: + integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + /shebang-command/1.2.0: + dependencies: + shebang-regex: 1.0.0 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + /shebang-command/2.0.0: + dependencies: + shebang-regex: 3.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + /shebang-regex/1.0.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + /shebang-regex/3.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + /shell-quote/1.7.2: + dev: true + resolution: + integrity: sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + /shellwords/0.1.1: + dev: true + optional: true + resolution: + integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + /side-channel/1.0.4: + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.1 + object-inspect: 1.9.0 + dev: true + resolution: + integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + /signal-exit/3.0.3: + dev: true + resolution: + integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + /simple-swizzle/0.2.2: + dependencies: + is-arrayish: 0.3.2 + dev: true + resolution: + integrity: sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + /sirv/1.0.11: + dependencies: + '@polka/url': 1.0.0-next.11 + mime: 2.5.2 + totalist: 1.1.0 + dev: true + engines: + node: '>= 10' + resolution: + integrity: sha512-SR36i3/LSWja7AJNRBz4fF/Xjpn7lQFI30tZ434dIy+bitLYSP+ZEenHg36i23V2SGEz+kqjksg0uOGZ5LPiqg== + /sisteransi/1.0.5: + dev: true + resolution: + integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + /slash/3.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + /slice-ansi/4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + /snapdragon-node/2.1.1: + dependencies: + define-property: 1.0.0 + isobject: 3.0.1 + snapdragon-util: 3.0.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + /snapdragon-util/3.0.1: + dependencies: + kind-of: 3.2.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + /snapdragon/0.8.2: + dependencies: + base: 0.11.2 + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + map-cache: 0.2.2 + source-map: 0.5.7 + source-map-resolve: 0.5.3 + use: 3.1.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + /sockjs-client/1.5.0: + dependencies: + debug: 3.2.7 + eventsource: 1.0.7 + faye-websocket: 0.11.3 + inherits: 2.0.4 + json3: 3.3.3 + url-parse: 1.5.1 + dev: true + resolution: + integrity: sha512-8Dt3BDi4FYNrCFGTL/HtwVzkARrENdwOUf1ZoW/9p3M8lZdFT35jVdrHza+qgxuG9H3/shR4cuX/X9umUrjP8Q== + /sockjs/0.3.21: + dependencies: + faye-websocket: 0.11.3 + uuid: 3.4.0 + websocket-driver: 0.7.4 + dev: true + resolution: + integrity: sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw== + /sort-keys/1.1.2: + dependencies: + is-plain-obj: 1.1.0 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + /source-list-map/2.0.1: + dev: true + resolution: + integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + /source-map-resolve/0.5.3: + dependencies: + atob: 2.1.2 + decode-uri-component: 0.2.0 + resolve-url: 0.2.1 + source-map-url: 0.4.1 + urix: 0.1.0 + dev: true + resolution: + integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + /source-map-resolve/0.6.0: + dependencies: + atob: 2.1.2 + decode-uri-component: 0.2.0 + dev: false + resolution: + integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== + /source-map-support/0.5.19: + dependencies: + buffer-from: 1.1.1 + source-map: 0.6.1 + dev: true + resolution: + integrity: sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + /source-map-url/0.4.1: + dev: true + resolution: + integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + /source-map/0.5.7: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + /source-map/0.6.1: + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + /source-map/0.7.3: + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + /sourcemap-codec/1.4.8: + dev: true + resolution: + integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + /spdx-correct/3.1.1: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.7 + dev: true + resolution: + integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + /spdx-exceptions/2.3.0: + dev: true + resolution: + integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + /spdx-expression-parse/3.0.1: + dependencies: + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.7 + dev: true + resolution: + integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + /spdx-license-ids/3.0.7: + dev: true + resolution: + integrity: sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== + /spdy-transport/3.0.0_supports-color@6.1.0: + dependencies: + debug: 4.3.1_supports-color@6.1.0 + detect-node: 2.0.4 + hpack.js: 2.1.6 + obuf: 1.1.2 + readable-stream: 3.6.0 + wbuf: 1.7.3 + dev: true + peerDependencies: + supports-color: '*' + resolution: + integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + /spdy/4.0.2_supports-color@6.1.0: + dependencies: + debug: 4.3.1_supports-color@6.1.0 + handle-thing: 2.0.1 + http-deceiver: 1.2.7 + select-hose: 2.0.0 + spdy-transport: 3.0.0_supports-color@6.1.0 + dev: true + engines: + node: '>=6.0.0' + peerDependencies: + supports-color: '*' + resolution: + integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + /split-string/3.1.0: + dependencies: + extend-shallow: 3.0.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + /sprintf-js/1.0.3: + dev: true + resolution: + integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + /spu-md5/0.0.4: + dev: false + resolution: + integrity: sha512-+YM92iiWpGNmAM+ZiWd2vAviA5utCB0I0Y8vptIaSF6FwPqyCbXskAGJ3VcVfdgS1YSARiBgyz7yOEJqzFSCWQ== + /sshpk/1.16.1: + dependencies: + asn1: 0.2.4 + assert-plus: 1.0.0 + bcrypt-pbkdf: 1.0.2 + dashdash: 1.14.1 + ecc-jsbn: 0.1.2 + getpass: 0.1.7 + jsbn: 0.1.1 + safer-buffer: 2.1.2 + tweetnacl: 0.14.5 + dev: true + engines: + node: '>=0.10.0' + hasBin: true + resolution: + integrity: sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + /ssri/6.0.1: + dependencies: + figgy-pudding: 3.5.2 + dev: true + resolution: + integrity: sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + /ssri/8.0.1: + dependencies: + minipass: 3.1.3 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + /stable/0.1.8: + dev: true + resolution: + integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + /stack-utils/2.0.3: + dependencies: + escape-string-regexp: 2.0.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== + /stackframe/1.2.0: + dev: true + resolution: + integrity: sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== + /static-extend/0.1.2: + dependencies: + define-property: 0.2.5 + object-copy: 0.1.0 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + /statuses/1.5.0: + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + /std-env/2.3.0: + dependencies: + ci-info: 3.1.1 + dev: true + resolution: + integrity: sha512-4qT5B45+Kjef2Z6pE0BkskzsH0GO7GrND0wGlTM1ioUe3v0dGYx9ZJH0Aro/YyA8fqQ5EyIKDRjZojJYMFTflw== + /stealthy-require/1.1.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + /stream-browserify/2.0.2: + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.7 + dev: true + resolution: + integrity: sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + /stream-each/1.2.3: + dependencies: + end-of-stream: 1.4.4 + stream-shift: 1.0.1 + dev: true + resolution: + integrity: sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + /stream-http/2.8.3: + dependencies: + builtin-status-codes: 3.0.0 + inherits: 2.0.4 + readable-stream: 2.3.7 + to-arraybuffer: 1.0.1 + xtend: 4.0.2 + dev: true + resolution: + integrity: sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + /stream-shift/1.0.1: + dev: true + resolution: + integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + /strict-uri-encode/1.1.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + /string-convert/0.2.1: + dev: false + resolution: + integrity: sha1-aYLMMEn7tM2F+LJFaLnZvznu/5c= + /string-length/4.0.1: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw== + /string-natural-compare/3.0.1: + dev: true + resolution: + integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== + /string-width/3.1.0: + dependencies: + emoji-regex: 7.0.3 + is-fullwidth-code-point: 2.0.0 + strip-ansi: 5.2.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + /string-width/4.2.2: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + /string.prototype.matchall/4.0.4: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.18.0 + has-symbols: 1.0.2 + internal-slot: 1.0.3 + regexp.prototype.flags: 1.3.1 + side-channel: 1.0.4 + dev: true + resolution: + integrity: sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ== + /string.prototype.trimend/1.0.4: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + resolution: + integrity: sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== + /string.prototype.trimstart/1.0.4: + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + resolution: + integrity: sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + /string_decoder/1.1.1: + dependencies: + safe-buffer: 5.1.2 + dev: true + resolution: + integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + /string_decoder/1.3.0: + dependencies: + safe-buffer: 5.2.1 + dev: true + resolution: + integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + /stringify-object/3.3.0: + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + /strip-ansi/3.0.1: + dependencies: + ansi-regex: 2.1.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + /strip-ansi/5.2.0: + dependencies: + ansi-regex: 4.1.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + /strip-ansi/6.0.0: + dependencies: + ansi-regex: 5.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + /strip-bom/3.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + /strip-bom/4.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + /strip-comments/1.0.2: + dependencies: + babel-extract-comments: 1.0.0 + babel-plugin-transform-object-rest-spread: 6.26.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw== + /strip-eof/1.0.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + /strip-final-newline/2.0.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + /strip-indent/3.0.0: + dependencies: + min-indent: 1.0.1 + dev: false + engines: + node: '>=8' + resolution: + integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + /strip-json-comments/3.1.1: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + /style-loader/1.3.0_webpack@4.44.2: + dependencies: + loader-utils: 2.0.0 + schema-utils: 2.7.1 + webpack: 4.44.2 + dev: true + engines: + node: '>= 8.9.0' + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + resolution: + integrity: sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== + /stylehacks/4.0.3: + dependencies: + browserslist: 4.16.3 + postcss: 7.0.35 + postcss-selector-parser: 3.1.2 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== + /supports-color/2.0.0: + dev: true + engines: + node: '>=0.8.0' + resolution: + integrity: sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + /supports-color/5.5.0: + dependencies: + has-flag: 3.0.0 + engines: + node: '>=4' + resolution: + integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + /supports-color/6.1.0: + dependencies: + has-flag: 3.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + /supports-color/7.2.0: + dependencies: + has-flag: 4.0.0 + engines: + node: '>=8' + resolution: + integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + /supports-hyperlinks/2.1.0: + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== + /svg-country-flags/1.2.10: + dev: false + resolution: + integrity: sha512-xrqwo0TYf/h2cfPvGpjdSuSguUbri4vNNizBnwzoZnX0xGo3O5nGJMlbYEp7NOYcnPGBm6LE2axqDWSB847bLw== + /svg-parser/2.0.4: + dev: true + resolution: + integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + /svgo/1.3.2: + dependencies: + chalk: 2.4.2 + coa: 2.0.2 + css-select: 2.1.0 + css-select-base-adapter: 0.1.1 + css-tree: 1.0.0-alpha.37 + csso: 4.2.0 + js-yaml: 3.14.1 + mkdirp: 0.5.5 + object.values: 1.1.3 + sax: 1.2.4 + stable: 0.1.8 + unquote: 1.1.1 + util.promisify: 1.0.1 + dev: true + engines: + node: '>=4.0.0' + hasBin: true + resolution: + integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + /symbol-observable/1.2.0: + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + /symbol-tree/3.2.4: + dev: true + resolution: + integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + /table/6.0.7: + dependencies: + ajv: 7.2.1 + lodash: 4.17.21 + slice-ansi: 4.0.0 + string-width: 4.2.2 + dev: true + engines: + node: '>=10.0.0' + resolution: + integrity: sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== + /tapable/1.1.3: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + /tar/6.1.0: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 3.1.3 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + dev: true + engines: + node: '>= 10' + resolution: + integrity: sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA== + /temp-dir/1.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= + /tempy/0.3.0: + dependencies: + temp-dir: 1.0.0 + type-fest: 0.3.1 + unique-string: 1.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ== + /terminal-link/2.1.1: + dependencies: + ansi-escapes: 4.3.1 + supports-hyperlinks: 2.1.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + /terser-webpack-plugin/1.4.5_webpack@4.44.2: + dependencies: + cacache: 12.0.4 + find-cache-dir: 2.1.0 + is-wsl: 1.1.0 + schema-utils: 1.0.0 + serialize-javascript: 4.0.0 + source-map: 0.6.1 + terser: 4.8.0 + webpack: 4.44.2 + webpack-sources: 1.4.3 + worker-farm: 1.7.0 + dev: true + engines: + node: '>= 6.9.0' + peerDependencies: + webpack: ^4.0.0 + resolution: + integrity: sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== + /terser-webpack-plugin/4.2.3_webpack@4.44.2: + dependencies: + cacache: 15.0.5 + find-cache-dir: 3.3.1 + jest-worker: 26.6.2 + p-limit: 3.1.0 + schema-utils: 3.0.0 + serialize-javascript: 5.0.1 + source-map: 0.6.1 + terser: 5.6.0 + webpack: 4.44.2 + webpack-sources: 1.4.3 + dev: true + engines: + node: '>= 10.13.0' + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + resolution: + integrity: sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ== + /terser/4.8.0: + dependencies: + commander: 2.20.3 + source-map: 0.6.1 + source-map-support: 0.5.19 + dev: true + engines: + node: '>=6.0.0' + hasBin: true + resolution: + integrity: sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + /terser/5.6.0: + dependencies: + commander: 2.20.3 + source-map: 0.7.3 + source-map-support: 0.5.19 + dev: true + engines: + node: '>=10' + hasBin: true + resolution: + integrity: sha512-vyqLMoqadC1uR0vywqOZzriDYzgEkNJFK4q9GeyOBHIbiECHiWLKcWfbQWAUaPfxkjDhapSlZB9f7fkMrvkVjA== + /test-exclude/6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.1.6 + minimatch: 3.0.4 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + /text-table/0.2.0: + dev: true + resolution: + integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + /throat/5.0.0: + dev: true + resolution: + integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== + /through2/2.0.5: + dependencies: + readable-stream: 2.3.7 + xtend: 4.0.2 + dev: true + resolution: + integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + /thunky/1.1.0: + dev: true + resolution: + integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + /timers-browserify/2.0.12: + dependencies: + setimmediate: 1.0.5 + dev: true + engines: + node: '>=0.6.0' + resolution: + integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== + /timsort/0.3.0: + dev: true + resolution: + integrity: sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + /tiny-invariant/1.1.0: + dev: false + resolution: + integrity: sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== + /tiny-warning/1.0.3: + dev: false + resolution: + integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + /tmpl/1.0.4: + dev: true + resolution: + integrity: sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + /to-arraybuffer/1.0.1: + dev: true + resolution: + integrity: sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + /to-fast-properties/1.0.3: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + /to-fast-properties/2.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + /to-object-path/0.3.0: + dependencies: + kind-of: 3.2.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + /to-regex-range/2.1.1: + dependencies: + is-number: 3.0.0 + repeat-string: 1.6.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + /to-regex-range/5.0.1: + dependencies: + is-number: 7.0.0 + dev: true + engines: + node: '>=8.0' + resolution: + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + /to-regex/3.0.2: + dependencies: + define-property: 2.0.2 + extend-shallow: 3.0.2 + regex-not: 1.0.2 + safe-regex: 1.1.0 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + /toggle-selection/1.0.6: + dev: false + resolution: + integrity: sha1-bkWxJj8gF/oKzH2J14sVuL932jI= + /toidentifier/1.0.0: + dev: true + engines: + node: '>=0.6' + resolution: + integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + /totalist/1.1.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== + /tough-cookie/2.5.0: + dependencies: + psl: 1.8.0 + punycode: 2.1.1 + dev: true + engines: + node: '>=0.8' + resolution: + integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + /tough-cookie/4.0.0: + dependencies: + psl: 1.8.0 + punycode: 2.1.1 + universalify: 0.1.2 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + /tr46/2.0.2: + dependencies: + punycode: 2.1.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== + /tryer/1.0.1: + dev: true + resolution: + integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== + /ts-loader/8.0.18_typescript@4.1.5: + dependencies: + chalk: 4.1.0 + enhanced-resolve: 4.5.0 + loader-utils: 2.0.0 + micromatch: 4.0.2 + semver: 7.3.4 + typescript: 4.1.5 + dev: true + engines: + node: '>=10.0.0' + peerDependencies: + typescript: '*' + webpack: '*' + resolution: + integrity: sha512-hRZzkydPX30XkLaQwJTDcWDoxZHK6IrEMDQpNd7tgcakFruFkeUp/aY+9hBb7BUGb+ZWKI0jiOGMo0MckwzdDQ== + /ts-pnp/1.2.0_typescript@4.1.5: + dependencies: + typescript: 4.1.5 + dev: true + engines: + node: '>=6' + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + resolution: + integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== + /tsconfig-paths/3.9.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.1 + minimist: 1.2.5 + strip-bom: 3.0.0 + dev: true + resolution: + integrity: sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + /tslib/1.14.1: + dev: true + resolution: + integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + /tslib/2.1.0: + resolution: + integrity: sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== + /tsutils/3.21.0_typescript@4.1.5: + dependencies: + tslib: 1.14.1 + typescript: 4.1.5 + dev: true + 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' + resolution: + integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + /tty-browserify/0.0.0: + dev: true + resolution: + integrity: sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + /tunnel-agent/0.6.0: + dependencies: + safe-buffer: 5.2.1 + dev: true + resolution: + integrity: sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + /tweetnacl/0.14.5: + dev: true + resolution: + integrity: sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + /type-check/0.3.2: + dependencies: + prelude-ls: 1.1.2 + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + /type-check/0.4.0: + dependencies: + prelude-ls: 1.2.1 + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + /type-detect/4.0.8: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + /type-fest/0.11.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + /type-fest/0.20.2: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + /type-fest/0.3.1: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + /type-fest/0.6.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + /type-fest/0.8.1: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + /type-is/1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.29 + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + /type/1.2.0: + dev: true + resolution: + integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + /type/2.5.0: + dev: true + resolution: + integrity: sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== + /typedarray-to-buffer/3.1.5: + dependencies: + is-typedarray: 1.0.0 + dev: true + resolution: + integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + /typedarray/0.0.6: + dev: true + resolution: + integrity: sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + /typesafe-actions/5.1.0: + dev: false + engines: + node: '>= 4' + resolution: + integrity: sha512-bna6Yi1pRznoo6Bz1cE6btB/Yy8Xywytyfrzu/wc+NFW3ZF0I+2iCGImhBsoYYCOWuICtRO4yHcnDlzgo1AdNg== + /typescript/4.1.5: + dev: true + engines: + node: '>=4.2.0' + hasBin: true + resolution: + integrity: sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA== + /unbox-primitive/1.0.0: + dependencies: + function-bind: 1.1.1 + has-bigints: 1.0.1 + has-symbols: 1.0.2 + which-boxed-primitive: 1.0.2 + resolution: + integrity: sha512-P/51NX+JXyxK/aigg1/ZgyccdAxm5K1+n8+tvqSntjOivPt19gvm1VC49RWYetsiub8WViUchdxl/KWHHB0kzA== + /unicode-canonical-property-names-ecmascript/1.0.4: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + /unicode-match-property-ecmascript/1.0.4: + dependencies: + unicode-canonical-property-names-ecmascript: 1.0.4 + unicode-property-aliases-ecmascript: 1.1.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + /unicode-match-property-value-ecmascript/1.2.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + /unicode-property-aliases-ecmascript/1.1.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + /union-value/1.0.1: + dependencies: + arr-union: 3.1.0 + get-value: 2.0.6 + is-extendable: 0.1.1 + set-value: 2.0.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + /uniq/1.0.1: + dev: true + resolution: + integrity: sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + /uniqs/2.0.0: + dev: true + resolution: + integrity: sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + /unique-filename/1.1.1: + dependencies: + unique-slug: 2.0.2 + dev: true + resolution: + integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + /unique-slug/2.0.2: + dependencies: + imurmurhash: 0.1.4 + dev: true + resolution: + integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + /unique-string/1.0.0: + dependencies: + crypto-random-string: 1.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= + /universalify/0.1.2: + dev: true + engines: + node: '>= 4.0.0' + resolution: + integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + /universalify/2.0.0: + dev: true + engines: + node: '>= 10.0.0' + resolution: + integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + /unpipe/1.0.0: + dev: true + engines: + node: '>= 0.8' + resolution: + integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + /unquote/1.1.1: + dev: true + resolution: + integrity: sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + /unset-value/1.0.0: + dependencies: + has-value: 0.3.1 + isobject: 3.0.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + /upath/1.2.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + /uri-js/4.4.1: + dependencies: + punycode: 2.1.1 + dev: true + resolution: + integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + /urix/0.1.0: + deprecated: Please see https://github.com/lydell/urix#deprecated + dev: true + resolution: + integrity: sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + /url-loader/4.1.1_file-loader@6.1.1+webpack@4.44.2: + dependencies: + file-loader: 6.1.1_webpack@4.44.2 + loader-utils: 2.0.0 + mime-types: 2.1.29 + schema-utils: 3.0.0 + webpack: 4.44.2 + dev: true + engines: + node: '>= 10.13.0' + peerDependencies: + file-loader: '*' + webpack: ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + file-loader: + optional: true + resolution: + integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== + /url-parse/1.5.1: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + dev: true + resolution: + integrity: sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== + /url/0.11.0: + dependencies: + punycode: 1.3.2 + querystring: 0.2.0 + dev: true + resolution: + integrity: sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + /use/3.1.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + /util-deprecate/1.0.2: + dev: true + resolution: + integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + /util.promisify/1.0.0: + dependencies: + define-properties: 1.1.3 + object.getownpropertydescriptors: 2.1.2 + dev: true + resolution: + integrity: sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + /util.promisify/1.0.1: + dependencies: + define-properties: 1.1.3 + es-abstract: 1.18.0 + has-symbols: 1.0.2 + object.getownpropertydescriptors: 2.1.2 + dev: true + resolution: + integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + /util/0.10.3: + dependencies: + inherits: 2.0.1 + dev: true + resolution: + integrity: sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + /util/0.11.1: + dependencies: + inherits: 2.0.3 + dev: true + resolution: + integrity: sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + /utila/0.4.0: + dev: true + resolution: + integrity: sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + /utility-types/3.10.0: + dev: true + engines: + node: '>= 4' + resolution: + integrity: sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== + /utils-merge/1.0.1: + dev: true + engines: + node: '>= 0.4.0' + resolution: + integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + /uuid/3.4.0: + dev: true + hasBin: true + resolution: + integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + /uuid/8.3.2: + hasBin: true + resolution: + integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + /v8-compile-cache/2.3.0: + dev: true + resolution: + integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + /v8-to-istanbul/7.1.0: + dependencies: + '@types/istanbul-lib-coverage': 2.0.3 + convert-source-map: 1.7.0 + source-map: 0.7.3 + dev: true + engines: + node: '>=10.10.0' + resolution: + integrity: sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g== + /validate-npm-package-license/3.0.4: + dependencies: + spdx-correct: 3.1.1 + spdx-expression-parse: 3.0.1 + dev: true + resolution: + integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + /value-equal/1.0.1: + dev: false + resolution: + integrity: sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== + /vary/1.1.2: + dev: true + engines: + node: '>= 0.8' + resolution: + integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + /vendors/1.0.4: + dev: true + resolution: + integrity: sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== + /verror/1.10.0: + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.3.0 + dev: true + engines: + '0': node >=0.6.0 + resolution: + integrity: sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + /vm-browserify/1.1.2: + dev: true + resolution: + integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + /void-elements/2.0.1: + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= + /w3c-hr-time/1.0.2: + dependencies: + browser-process-hrtime: 1.0.0 + dev: true + resolution: + integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + /w3c-xmlserializer/2.0.0: + dependencies: + xml-name-validator: 3.0.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + /walker/1.0.7: + dependencies: + makeerror: 1.0.11 + dev: true + resolution: + integrity: sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + /warning/4.0.3: + dependencies: + loose-envify: 1.4.0 + dev: false + resolution: + integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + /watchpack-chokidar2/2.0.1: + dependencies: + chokidar: 2.1.8 + dev: true + optional: true + resolution: + integrity: sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== + /watchpack/1.7.5: + dependencies: + graceful-fs: 4.2.6 + neo-async: 2.6.2 + dev: true + optionalDependencies: + chokidar: 3.5.1 + watchpack-chokidar2: 2.0.1 + resolution: + integrity: sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== + /wbuf/1.7.3: + dependencies: + minimalistic-assert: 1.0.1 + dev: true + resolution: + integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + /web-vitals/1.1.1: + dev: false + resolution: + integrity: sha512-jYOaqu01Ny1NvMwJ3dBJDUOJ2PGWknZWH4AUnvFOscvbdHMERIKT2TlgiAey5rVyfOePG7so2JcXXZdSnBvioQ== + /webidl-conversions/5.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + /webidl-conversions/6.1.0: + dev: true + engines: + node: '>=10.4' + resolution: + integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + /webpack-bundle-analyzer/4.4.0: + dependencies: + acorn: 8.1.0 + acorn-walk: 8.0.2 + chalk: 4.1.0 + commander: 6.2.1 + gzip-size: 6.0.0 + lodash: 4.17.21 + opener: 1.5.2 + sirv: 1.0.11 + ws: 7.4.4 + dev: true + engines: + node: '>= 10.13.0' + hasBin: true + resolution: + integrity: sha512-9DhNa+aXpqdHk8LkLPTBU/dMfl84Y+WE2+KnfI6rSpNRNVKa0VGLjPd2pjFubDeqnWmulFggxmWBxhfJXZnR0g== + /webpack-dev-middleware/3.7.3_webpack@4.44.2: + dependencies: + memory-fs: 0.4.1 + mime: 2.5.2 + mkdirp: 0.5.5 + range-parser: 1.2.1 + webpack: 4.44.2 + webpack-log: 2.0.0 + dev: true + engines: + node: '>= 6' + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + resolution: + integrity: sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== + /webpack-dev-server/3.11.1_webpack@4.44.2: + dependencies: + ansi-html: 0.0.7 + bonjour: 3.5.0 + chokidar: 2.1.8 + compression: 1.7.4 + connect-history-api-fallback: 1.6.0 + debug: 4.3.1_supports-color@6.1.0 + del: 4.1.1 + express: 4.17.1 + html-entities: 1.4.0 + http-proxy-middleware: 0.19.1_debug@4.3.1 + import-local: 2.0.0 + internal-ip: 4.3.0 + ip: 1.1.5 + is-absolute-url: 3.0.3 + killable: 1.0.1 + loglevel: 1.7.1 + opn: 5.5.0 + p-retry: 3.0.1 + portfinder: 1.0.28 + schema-utils: 1.0.0 + selfsigned: 1.10.8 + semver: 6.3.0 + serve-index: 1.9.1 + sockjs: 0.3.21 + sockjs-client: 1.5.0 + spdy: 4.0.2_supports-color@6.1.0 + strip-ansi: 3.0.1 + supports-color: 6.1.0 + url: 0.11.0 + webpack: 4.44.2 + webpack-dev-middleware: 3.7.3_webpack@4.44.2 + webpack-log: 2.0.0 + ws: 6.2.1 + yargs: 13.3.2 + dev: true + engines: + node: '>= 6.11.5' + hasBin: true + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + resolution: + integrity: sha512-u4R3mRzZkbxQVa+MBWi2uVpB5W59H3ekZAJsQlKUTdl7Elcah2EhygTPLmeFXybQkf9i2+L0kn7ik9SnXa6ihQ== + /webpack-log/2.0.0: + dependencies: + ansi-colors: 3.2.4 + uuid: 3.4.0 + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + /webpack-manifest-plugin/2.2.0_webpack@4.44.2: + dependencies: + fs-extra: 7.0.1 + lodash: 4.17.21 + object.entries: 1.1.3 + tapable: 1.1.3 + webpack: 4.44.2 + dev: true + engines: + node: '>=6.11.5' + peerDependencies: + webpack: 2 || 3 || 4 + resolution: + integrity: sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ== + /webpack-merge/4.2.2: + dependencies: + lodash: 4.17.21 + dev: true + resolution: + integrity: sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== + /webpack-sources/1.4.3: + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + dev: true + resolution: + integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + /webpack/4.44.2: + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-module-context': 1.9.0 + '@webassemblyjs/wasm-edit': 1.9.0 + '@webassemblyjs/wasm-parser': 1.9.0 + acorn: 6.4.2 + ajv: 6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + chrome-trace-event: 1.0.2 + enhanced-resolve: 4.5.0 + eslint-scope: 4.0.3 + json-parse-better-errors: 1.0.2 + loader-runner: 2.4.0 + loader-utils: 1.4.0 + memory-fs: 0.4.1 + micromatch: 3.1.10 + mkdirp: 0.5.5 + neo-async: 2.6.2 + node-libs-browser: 2.2.1 + schema-utils: 1.0.0 + tapable: 1.1.3 + terser-webpack-plugin: 1.4.5_webpack@4.44.2 + watchpack: 1.7.5 + webpack-sources: 1.4.3 + dev: true + engines: + node: '>=6.11.5' + hasBin: true + peerDependencies: + webpack-cli: '*' + webpack-command: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + webpack-command: + optional: true + resolution: + integrity: sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q== + /webpackbar/5.0.0-3: + dependencies: + ansi-escapes: 4.3.1 + chalk: 4.1.0 + consola: 2.15.3 + figures: 3.2.0 + pretty-time: 1.1.0 + std-env: 2.3.0 + text-table: 0.2.0 + wrap-ansi: 7.0.0 + dev: true + engines: + node: '>=10' + peerDependencies: + webpack: 3 || 4 || 5 + resolution: + integrity: sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g== + /websocket-as-promised/2.0.1: + dependencies: + chnl: 1.2.0 + promise-controller: 1.0.0 + promise.prototype.finally: 3.1.2 + promised-map: 1.0.0 + dev: false + engines: + node: '>=6' + resolution: + integrity: sha512-ePV26D/D37ughXU9j+DjGmwUbelWJrC/vi+6GK++fRlBJmS7aU9T8ABu47KFF0O7r6XN2NAuqJRpegbUwXZxQg== + /websocket-driver/0.7.4: + dependencies: + http-parser-js: 0.5.3 + safe-buffer: 5.2.1 + websocket-extensions: 0.1.4 + dev: true + engines: + node: '>=0.8.0' + resolution: + integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + /websocket-extensions/0.1.4: + dev: true + engines: + node: '>=0.8.0' + resolution: + integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + /whatwg-encoding/1.0.5: + dependencies: + iconv-lite: 0.4.24 + dev: true + resolution: + integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + /whatwg-fetch/3.6.2: + dev: true + resolution: + integrity: sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== + /whatwg-mimetype/2.3.0: + dev: true + resolution: + integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + /whatwg-url/8.4.0: + dependencies: + lodash.sortby: 4.7.0 + tr46: 2.0.2 + webidl-conversions: 6.1.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw== + /which-boxed-primitive/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 + resolution: + integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + /which-module/2.0.0: + dev: true + resolution: + integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + /which/1.3.1: + dependencies: + isexe: 2.0.0 + dev: true + hasBin: true + resolution: + integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + /which/2.0.2: + dependencies: + isexe: 2.0.0 + dev: true + engines: + node: '>= 8' + hasBin: true + resolution: + integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + /word-wrap/1.2.3: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + /workbox-background-sync/5.1.4: + dependencies: + workbox-core: 5.1.4 + dev: true + resolution: + integrity: sha512-AH6x5pYq4vwQvfRDWH+vfOePfPIYQ00nCEB7dJRU1e0n9+9HMRyvI63FlDvtFT2AvXVRsXvUt7DNMEToyJLpSA== + /workbox-broadcast-update/5.1.4: + dependencies: + workbox-core: 5.1.4 + dev: true + resolution: + integrity: sha512-HTyTWkqXvHRuqY73XrwvXPud/FN6x3ROzkfFPsRjtw/kGZuZkPzfeH531qdUGfhtwjmtO/ZzXcWErqVzJNdXaA== + /workbox-build/5.1.4: + dependencies: + '@babel/core': 7.12.3 + '@babel/preset-env': 7.13.10_@babel+core@7.12.3 + '@babel/runtime': 7.13.10 + '@hapi/joi': 15.1.1 + '@rollup/plugin-node-resolve': 7.1.3_rollup@1.32.1 + '@rollup/plugin-replace': 2.4.1_rollup@1.32.1 + '@surma/rollup-plugin-off-main-thread': 1.4.2 + common-tags: 1.8.0 + fast-json-stable-stringify: 2.1.0 + fs-extra: 8.1.0 + glob: 7.1.6 + lodash.template: 4.5.0 + pretty-bytes: 5.6.0 + rollup: 1.32.1 + rollup-plugin-babel: 4.4.0_@babel+core@7.12.3+rollup@1.32.1 + rollup-plugin-terser: 5.3.1_rollup@1.32.1 + source-map: 0.7.3 + source-map-url: 0.4.1 + stringify-object: 3.3.0 + strip-comments: 1.0.2 + tempy: 0.3.0 + upath: 1.2.0 + workbox-background-sync: 5.1.4 + workbox-broadcast-update: 5.1.4 + workbox-cacheable-response: 5.1.4 + workbox-core: 5.1.4 + workbox-expiration: 5.1.4 + workbox-google-analytics: 5.1.4 + workbox-navigation-preload: 5.1.4 + workbox-precaching: 5.1.4 + workbox-range-requests: 5.1.4 + workbox-routing: 5.1.4 + workbox-strategies: 5.1.4 + workbox-streams: 5.1.4 + workbox-sw: 5.1.4 + workbox-window: 5.1.4 + dev: true + engines: + node: '>=8.0.0' + resolution: + integrity: sha512-xUcZn6SYU8usjOlfLb9Y2/f86Gdo+fy1fXgH8tJHjxgpo53VVsqRX0lUDw8/JuyzNmXuo8vXX14pXX2oIm9Bow== + /workbox-cacheable-response/5.1.4: + dependencies: + workbox-core: 5.1.4 + dev: true + resolution: + integrity: sha512-0bfvMZs0Of1S5cdswfQK0BXt6ulU5kVD4lwer2CeI+03czHprXR3V4Y8lPTooamn7eHP8Iywi5QjyAMjw0qauA== + /workbox-core/5.1.4: + dev: true + resolution: + integrity: sha512-+4iRQan/1D8I81nR2L5vcbaaFskZC2CL17TLbvWVzQ4qiF/ytOGF6XeV54pVxAvKUtkLANhk8TyIUMtiMw2oDg== + /workbox-core/6.1.1: + dev: false + resolution: + integrity: sha512-xsc/72AQxFtt2BHmwU8QtnVV+W5ln4nnYGuz9Q5sPWYGqW4cH0P+FpZDoGM59bmNEyNf+W9bEmidW//e5GsbwQ== + /workbox-expiration/5.1.4: + dependencies: + workbox-core: 5.1.4 + dev: true + resolution: + integrity: sha512-oDO/5iC65h2Eq7jctAv858W2+CeRW5e0jZBMNRXpzp0ZPvuT6GblUiHnAsC5W5lANs1QS9atVOm4ifrBiYY7AQ== + /workbox-google-analytics/5.1.4: + dependencies: + workbox-background-sync: 5.1.4 + workbox-core: 5.1.4 + workbox-routing: 5.1.4 + workbox-strategies: 5.1.4 + dev: true + resolution: + integrity: sha512-0IFhKoEVrreHpKgcOoddV+oIaVXBFKXUzJVBI+nb0bxmcwYuZMdteBTp8AEDJacENtc9xbR0wa9RDCnYsCDLjA== + /workbox-navigation-preload/5.1.4: + dependencies: + workbox-core: 5.1.4 + dev: true + resolution: + integrity: sha512-Wf03osvK0wTflAfKXba//QmWC5BIaIZARU03JIhAEO2wSB2BDROWI8Q/zmianf54kdV7e1eLaIEZhth4K4MyfQ== + /workbox-precaching/5.1.4: + dependencies: + workbox-core: 5.1.4 + dev: true + resolution: + integrity: sha512-gCIFrBXmVQLFwvAzuGLCmkUYGVhBb7D1k/IL7pUJUO5xacjLcFUaLnnsoVepBGAiKw34HU1y/YuqvTKim9qAZA== + /workbox-precaching/6.1.1: + dependencies: + workbox-core: 6.1.1 + workbox-routing: 6.1.1 + workbox-strategies: 6.1.1 + dev: false + resolution: + integrity: sha512-x8OKwtjd5ewe/x3VlKcXri1P3Tm0uV+uChdMYg/QryrCR9K8x9xwhAw8PZPkwrY0bLLsJMUoX9/lBu8DmjVqTA== + /workbox-range-requests/5.1.4: + dependencies: + workbox-core: 5.1.4 + dev: true + resolution: + integrity: sha512-1HSujLjgTeoxHrMR2muDW2dKdxqCGMc1KbeyGcmjZZAizJTFwu7CWLDmLv6O1ceWYrhfuLFJO+umYMddk2XMhw== + /workbox-routing/5.1.4: + dependencies: + workbox-core: 5.1.4 + dev: true + resolution: + integrity: sha512-8ljknRfqE1vEQtnMtzfksL+UXO822jJlHTIR7+BtJuxQ17+WPZfsHqvk1ynR/v0EHik4x2+826Hkwpgh4GKDCw== + /workbox-routing/6.1.1: + dependencies: + workbox-core: 6.1.1 + dev: false + resolution: + integrity: sha512-Az3Gt3cHNK+W0gTfSb4eKGfwEap9Slak16Krr5SiLhE1gXUY2C2O123HucVCedXgIoqTLOXMtNj71Cm6SwYDEg== + /workbox-strategies/5.1.4: + dependencies: + workbox-core: 5.1.4 + workbox-routing: 5.1.4 + dev: true + resolution: + integrity: sha512-VVS57LpaJTdjW3RgZvPwX0NlhNmscR7OQ9bP+N/34cYMDzXLyA6kqWffP6QKXSkca1OFo/v6v7hW7zrrguo6EA== + /workbox-strategies/6.1.1: + dependencies: + workbox-core: 6.1.1 + dev: false + resolution: + integrity: sha512-7qYA9Eiq6hnP2dyenlD7ZtWI1ArBMT8yhTvHVlaOl9kYY7W+Iv3lAfRCjj/nucOKeVXATx4iVJEuFPn5J+8lzw== + /workbox-streams/5.1.4: + dependencies: + workbox-core: 5.1.4 + workbox-routing: 5.1.4 + dev: true + resolution: + integrity: sha512-xU8yuF1hI/XcVhJUAfbQLa1guQUhdLMPQJkdT0kn6HP5CwiPOGiXnSFq80rAG4b1kJUChQQIGPrq439FQUNVrw== + /workbox-sw/5.1.4: + dev: true + resolution: + integrity: sha512-9xKnKw95aXwSNc8kk8gki4HU0g0W6KXu+xks7wFuC7h0sembFnTrKtckqZxbSod41TDaGh+gWUA5IRXrL0ECRA== + /workbox-webpack-plugin/5.1.4_webpack@4.44.2: + dependencies: + '@babel/runtime': 7.13.10 + fast-json-stable-stringify: 2.1.0 + source-map-url: 0.4.1 + upath: 1.2.0 + webpack: 4.44.2 + webpack-sources: 1.4.3 + workbox-build: 5.1.4 + dev: true + engines: + node: '>=8.0.0' + peerDependencies: + webpack: ^4.0.0 + resolution: + integrity: sha512-PZafF4HpugZndqISi3rZ4ZK4A4DxO8rAqt2FwRptgsDx7NF8TVKP86/huHquUsRjMGQllsNdn4FNl8CD/UvKmQ== + /workbox-window/5.1.4: + dependencies: + workbox-core: 5.1.4 + dev: true + resolution: + integrity: sha512-vXQtgTeMCUq/4pBWMfQX8Ee7N2wVC4Q7XYFqLnfbXJ2hqew/cU1uMTD2KqGEgEpE4/30luxIxgE+LkIa8glBYw== + /worker-farm/1.7.0: + dependencies: + errno: 0.1.8 + dev: true + resolution: + integrity: sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + /worker-rpc/0.1.1: + dependencies: + microevent.ts: 0.1.1 + dev: true + resolution: + integrity: sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg== + /workerize-loader/1.3.0: + dependencies: + loader-utils: 2.0.0 + dev: true + peerDependencies: + webpack: '*' + resolution: + integrity: sha512-utWDc8K6embcICmRBUUkzanPgKBb8yM1OHfh6siZfiMsswE8wLCa9CWS+L7AARz0+Th4KH4ZySrqer/OJ9WuWw== + /world-countries/4.0.0: + dev: false + resolution: + integrity: sha512-LsFFYmggquj0U+i7VUaJOZYz5F4QNu+oceGw8odnyVHMT2LxYSdVncqdouOEnq1esr7yCakp9+3BZTztuSw1Pg== + /wrap-ansi/5.1.0: + dependencies: + ansi-styles: 3.2.1 + string-width: 3.1.0 + strip-ansi: 5.2.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + /wrap-ansi/6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.2 + strip-ansi: 6.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + /wrap-ansi/7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.2 + strip-ansi: 6.0.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + /wrappy/1.0.2: + dev: true + resolution: + integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + /write-file-atomic/3.0.3: + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.3 + typedarray-to-buffer: 3.1.5 + dev: true + resolution: + integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + /ws/6.2.1: + dependencies: + async-limiter: 1.0.1 + dev: true + resolution: + integrity: sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + /ws/7.4.4: + dev: true + engines: + node: '>=8.3.0' + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + resolution: + integrity: sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw== + /xml-name-validator/3.0.0: + dev: true + resolution: + integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + /xmlchars/2.2.0: + dev: true + resolution: + integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + /xtend/4.0.2: + dev: true + engines: + node: '>=0.4' + resolution: + integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + /y18n/4.0.1: + dev: true + resolution: + integrity: sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + /yallist/3.1.1: + dev: true + resolution: + integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + /yallist/4.0.0: + resolution: + integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + /yaml/1.10.2: + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + /yargs-parser/13.1.2: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: true + resolution: + integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + /yargs-parser/18.1.3: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + /yargs/13.3.2: + dependencies: + cliui: 5.0.0 + find-up: 3.0.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 3.1.0 + which-module: 2.0.0 + y18n: 4.0.1 + yargs-parser: 13.1.2 + dev: true + resolution: + integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + /yargs/15.4.1: + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.2 + which-module: 2.0.0 + y18n: 4.0.1 + yargs-parser: 18.1.3 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + /yocto-queue/0.1.0: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +specifiers: + '@ant-design/icons': ^4.5.0 + '@craco/craco': ^6.1.1 + '@lemmmy/craco-less': 1.18.0 + '@simbathesailor/babel-plugin-use-what-changed': ^2.0.3 + '@simbathesailor/use-what-changed': ^1.0.0 + '@testing-library/jest-dom': ^5.11.9 + '@testing-library/react': ^11.2.5 + '@testing-library/user-event': ^12.8.3 + '@types/classnames': ^2.2.11 + '@types/debug': ^4.1.5 + '@types/file-saver': ^2.0.1 + '@types/jest': ^26.0.20 + '@types/lodash-es': ^4.17.4 + '@types/lru-cache': ^5.1.0 + '@types/node': ^14.14.34 + '@types/react': ^17.0.3 + '@types/react-dom': ^17.0.2 + '@types/react-redux': ^7.1.16 + '@types/react-router-dom': ^5.1.7 + '@types/react-timeago': ^4.1.2 + '@types/semver': ^7.3.4 + '@types/shallowequal': ^1.1.1 + '@types/uuid': ^8.3.0 + '@types/webpack-env': ^1.16.0 + '@typescript-eslint/eslint-plugin': 4.15.3-alpha.17 + '@typescript-eslint/parser': 4.15.3-alpha.17 + antd: ^4.14.0 + antd-dayjs-webpack-plugin: ^1.0.6 + async-mutex: ^0.3.1 + await-to-js: ^2.1.1 + babel-plugin-lodash: ^3.3.4 + base64-arraybuffer: ^0.2.0 + chart.js: ^2.9.4 + classnames: ^2.2.6 + craco-alias: ^2.2.0 + csv-stringify: ^5.6.2 + dayjs: ^1.10.4 + debug: ^4.3.1 + eslint: ^7.22.0 + eslint-plugin-react: ^7.22.0 + eslint-plugin-react-hooks: ^4.2.0 + eslint-plugin-tsdoc: ^0.2.11 + file-saver: ^2.0.5 + git-revision-webpack-plugin: ^3.0.6 + gitlog: ^4.0.4 + i18next: ^19.9.2 + i18next-browser-languagedetector: ^6.0.1 + i18next-http-backend: ^1.1.1 + json5: ^2.2.0 + less: 4.1.1 + less-loader: 7.3.0 + lodash-es: ^4.17.21 + lru-cache: ^6.0.0 + markdown-to-jsx: ^7.1.2 + rc-menu: ^8.10.6 + react: ^17.0.1 + react-chartjs-2: ^2.11.1 + react-dom: ^17.0.1 + react-file-drop: ^3.1.2 + react-hotkeys: ^2.0.0 + react-i18next: ^11.8.10 + react-redux: ^7.2.2 + react-refresh: ^0.9.0 + react-router-dom: ^5.2.0 + react-scripts: ^4.0.3 + react-timeago: ^5.2.0 + react-world-flags: ^1.4.0 + redux: ^4.0.5 + redux-devtools-extension: ^2.13.9 + rimraf: ^3.0.2 + semver: ^7.3.4 + shallowequal: ^1.1.0 + spu-md5: 0.0.4 + ts-loader: ^8.0.18 + typesafe-actions: ^5.1.0 + typescript: 4.1.5 + utility-types: ^3.10.0 + uuid: ^8.3.2 + web-vitals: ^1.1.1 + webpack-bundle-analyzer: ^4.4.0 + webpackbar: ^5.0.0-3 + websocket-as-promised: ^2.0.1 + workbox-core: ^6.1.1 + workbox-precaching: ^6.1.1 + workbox-routing: ^6.1.1 + workbox-strategies: ^6.1.1 + workerize-loader: ^1.3.0 diff --git a/public/favicon.ico b/public/favicon.ico index bcd5dfd..ca5a4c0 100644 --- a/public/favicon.ico +++ b/public/favicon.ico Binary files differ diff --git a/public/img/firefox.svg b/public/img/firefox.svg new file mode 100644 index 0000000..600f53a --- /dev/null +++ b/public/img/firefox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/img/flags_responsive.png b/public/img/flags_responsive.png new file mode 100644 index 0000000..e93d295 --- /dev/null +++ b/public/img/flags_responsive.png Binary files differ diff --git a/public/img/google-chrome.svg b/public/img/google-chrome.svg new file mode 100644 index 0000000..03c0a18 --- /dev/null +++ b/public/img/google-chrome.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/img/tmpim.svg b/public/img/tmpim.svg new file mode 100644 index 0000000..b29e949 --- /dev/null +++ b/public/img/tmpim.svg @@ -0,0 +1,66 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/public/index.html b/public/index.html index aa069f2..31dd925 100644 --- a/public/index.html +++ b/public/index.html @@ -7,37 +7,86 @@ - - - React App + KristWeb + + -
- + diff --git a/public/locales/de.json b/public/locales/de.json new file mode 100644 index 0000000..b4b110b --- /dev/null +++ b/public/locales/de.json @@ -0,0 +1,91 @@ +{ + "app": { + "name": "KristWeb" + }, + + "nav": { + "connection": { + "online": "Online", + "offline": "Offline", + "connecting": "Verbindung wird hergestellt" + }, + + "search": "Krist-Netzwerk durchsuchen", + + "send": "Überweisen", + "request": "Zahlung anfordern" + }, + + "sidebar": { + "totalBalance": "Gesamtsaldo", + "guestIndicator": "Als Gast angemeldet", + "dashboard": "Dashboard", + "myWallets": "Meine Wallets", + "addressBook": "Adressbuch", + "transactions": "Transaktionen", + "names": "Namen", + "mining": "Mining", + "network": "Netzwerk", + "blocks": "Blöcke", + "statistics": "Statistiken", + "madeBy": "Entwickelt von <1>{{authorName}}", + "hostedBy": "Von <1>{{host}} bereitgestellt", + "github": "GitHub", + "credits": "Danksagung" + }, + + "credits": { + "madeBy": "Entwickelt von <1>{{authorName}}", + "supportersTitle": "Unterstützer", + "supportersDescription": "Dieses Projekt wurde ermöglicht durch die folgenden Personen:", + "supportButton": "KristWeb unterstützen", + "translatorsTitle": "Übersetzer", + "translatorsDescription": "Dieses Projekt wurde übersetzt von:", + "translateButton": "KristWeb übersetzen" + }, + + "dialog": { + "close": "Schließen" + }, + + "pagination": { + "justPage": "Seite {{page}}", + "pageWithTotal": "Seite {{page}} von {{total}}" + }, + + "loading": "Wird geladen...", + + "masterPassword": { + "dialogTitle": "Master-Passwort", + "passwordPlaceholder": "Master-Passwort", + "browseAsGuest": "Als Gast anmelden", + "createPassword": "Passwort erstellen", + "logIn": "Anmelden", + "forgotPassword": "Passwort vergessen?", + "intro": "Gebe ein Master-Passwort ein um deine Wallets zu verschlüsseln, oder melde dich als Gast an. <1>.", + "dontForgetPassword": "Bewahre dieses Passwort gut auf. Die gespeicherten Wallets können unter keinen Umständen wiederhergestellt werden!", + "loginIntro": "Gebe dein Master-Passwort ein um auf deine Wallets zuzugreifen, oder melde dich als Gast an.", + "learnMore": "mehr erfahren", + "errorPasswordRequired": "Fehlendes Passwort!", + "errorPasswordUnset": "Es wurde kein Master-Passwort gesetzt.", + "errorPasswordIncorrect": "Falsches Passwort.", + "errorUnknown": "Unbekannter Fehler.", + "helpWalletStorageTitle": "Hilfe: Speicherung von Wallets", + "helpWalletStorage": "Wenn du eine neue Wallet zu KristWeb hinzufügst, wird dessen Privatschlüssel mit Hilfe deines Master-Passworts verschlüsselt und in dem lokalen Speicher deines Browsers aufbewahrt.\nAlle Wallets sind mit genau diesem Master-Passwort verschlüsselt. Das bedeutet, dass du das Master-Passwort jedes Mal eingeben musst, wenn du KristWeb öffnest.\n Deine tatsächliche Krist-Wallet wird dabei nicht berührt.\nWenn du dich in KristWeb als Gast anmeldest, kannst du keine Wallets hinzufügen oder benutzen, sondern nur das Krist-Netzwerk durchsuchen." + }, + + "myWallets": { + "title": "Wallets", + "manageBackups": "Sicherungen verwalten", + "createWallet": "Wallet erstellen", + "addExistingWallet": "Bestehendes Wallet hinzufügen", + "searchPlaceholder": "Wallets durchsuchen...", + "categoryDropdownAll": "Alle Kategorien", + "columnLabel": "Kurzbeschreibung", + "columnAddress": "Adresse", + "columnBalance": "Saldo", + "columnNames": "Namen", + "columnCategory": "Kategorie", + "columnFirstSeen": "Erstmals erschienen" + } +} diff --git a/public/locales/en.json b/public/locales/en.json new file mode 100644 index 0000000..0d4e6f0 --- /dev/null +++ b/public/locales/en.json @@ -0,0 +1,1070 @@ +{ + "app": { + "name": "KristWeb" + }, + + "nav": { + "connection": { + "online": "Online", + "offline": "Offline", + "connecting": "Connecting" + }, + + "search": { + "placeholder": "Search the Krist network", + "placeholderShortcut": "Search the Krist network ({{shortcut}})", + "rateLimitHit": "Please slow down.", + "noResults": "No results.", + + "resultAddress": "Address", + "resultName": "Name", + "resultNameOwner": "Owned by <1 />", + "resultBlockID": "Block ID", + "resultBlockIDMinedBy": "Mined by <1 />", + "resultTransactionID": "Transaction ID", + "resultTransactions": "Transactions", + "resultTransactionsAddress": "Search for transactions involving <1 />", + "resultTransactionsAddressResult": "<0>{{count, number}} transaction involving <2 />", + "resultTransactionsAddressResult_plural": "<0>{{count, number}} transactions involving <2 />", + "resultTransactionsAddressResultEmpty": "No transactions involving <1 />", + "resultTransactionsName": "Search for transactions involving <1 />", + "resultTransactionsNameResult": "<0>{{count, number}} transaction sent to <2 />", + "resultTransactionsNameResult_plural": "<0>{{count, number}} transactions sent to <2 />", + "resultTransactionsNameResultEmpty": "No transactions sent to <1 />", + "resultTransactionsMetadata": "Searching for metadata containing <1 />", + "resultTransactionsMetadataResult": "<0>{{count, number}} transaction with metadata containing <2 />", + "resultTransactionsMetadataResult_plural": "<0>{{count, number}} transactions with metadata containing <2 />", + "resultTransactionsMetadataResultEmpty": "No transactions with metadata containing <1 />" + }, + + "send": "Send", + "request": "Request", + + "settings": "Settings" + }, + + "sidebar": { + "totalBalance": "Total Balance", + "dashboard": "Dashboard", + "myWallets": "My Wallets", + "addressBook": "Address Book", + "transactions": "Transactions", + "names": "Names", + "mining": "Mining", + "network": "Network", + "blocks": "Blocks", + "statistics": "Statistics", + "madeBy": "Made by <1>{{authorName}}", + "hostedBy": "Hosted by <1>{{host}}", + "github": "GitHub", + "credits": "Credits", + "whatsNew": "What's new", + + "updateTitle": "Update available!", + "updateDescription": "A new version of KristWeb is available. Please reload.", + "updateReload": "Reload" + }, + + "dialog": { + "close": "Close", + "yes": "Yes", + "no": "No", + "ok": "OK", + "cancel": "Cancel" + }, + + "pagination": { + "justPage": "Page {{page}}", + "pageWithTotal": "Page {{page}} of {{total}}" + }, + + "error": "Error", + "loading": "Loading...", + + "copy": "Copy to clipboard", + "copied": "Copied!", + + "pageNotFound": { + "resultTitle": "Page not found", + "buttonGoBack": "Go back" + }, + + "contextualAddressUnknown": "Unknown", + "contextualAddressNonExistentTooltip": "This address has not yet been initialised on the Krist network.", + + "typeahead": { + "emptyLabel": "No matches found.", + "paginationText": "Display additional results..." + }, + + "masterPassword": { + "dialogTitle": "Master password", + "passwordPlaceholder": "Master password", + "passwordConfirmPlaceholder": "Confirm master password", + "createPassword": "Create password", + "logIn": "Log in", + "forgotPassword": "Forgot password?", + "intro2": "Enter a <1>master password to encrypt your wallet private keys. They will be saved in your browser's local storage, and you will be asked for the master password to decrypt them once per session.", + "learnMore": "learn more", + "errorPasswordRequired": "Password is required.", + "errorPasswordLength": "Must be at least 1 character.", + "errorPasswordUnset": "Master password has not been set up.", + "errorPasswordIncorrect": "Incorrect password.", + "errorPasswordInequal": "Passwords must match.", + "errorStorageCorrupt": "Wallet storage is corrupted.", + "errorNoPassword": "Master password is required.", + "errorUnknown": "Unknown error.", + "helpWalletStorageTitle": "Help: Wallet storage", + "popoverTitle": "Decrypt wallets", + "popoverTitleEncrypt": "Encrypt wallets", + "popoverAuthoriseButton": "Authorise", + "popoverDescription": "Enter your master password to decrypt your wallets.", + "popoverDescriptionEncrypt": "Enter your master password to encrypt and decrypt your wallets.", + "forcedAuthWarning": "You were automatically logged in by an insecure debug setting." + }, + + "myWallets": { + "title": "Wallets", + "manageBackups": "Manage backups", + "importBackup": "Import wallets", + "exportBackup": "Export wallets", + "createWallet": "Create wallet", + "addExistingWallet": "Add existing wallet", + "searchPlaceholder": "Search wallets...", + "categoryDropdownAll": "All categories", + "columnLabel": "Label", + "columnAddress": "Address", + "columnBalance": "Balance", + "columnNames": "Names", + "columnCategory": "Category", + "columnFirstSeen": "First Seen", + "nameCount": "{{count, number}} name", + "nameCount_plural": "{{count, number}} names", + "nameCountEmpty": "No names", + "firstSeen": "First seen {{date}}", + + "walletCount": "{{count, number}} wallet", + "walletCount_plural": "{{count, number}} wallets", + "walletCountEmpty": "No wallets", + + "actionsEditTooltip": "Edit wallet", + "actionsSendTransaction": "Send Krist", + "actionsWalletInfo": "Wallet info", + "actionsDelete": "Delete wallet", + "actionsDeleteConfirm": "Are you sure you want to delete this wallet?", + "actionsDeleteConfirmDescription": "If you haven't backed it up or saved its password, it will be lost forever!", + + "tagDontSave": "Temp", + "tagDontSaveTooltip": "Temporary wallet", + + "info": { + "title": "Wallet info - {{address}}", + + "titleBasicInfo": "Basic info", + "id": "ID", + "label": "Label", + "category": "Category", + "username": "Username", + "password": "Password", + "privatekey": "Private key", + "format": "Format", + + "titleSyncedInfo": "Synced info", + "address": "Address", + "balance": "Balance", + "names": "Name count", + "firstSeen": "First seen", + "existsOnNetwork": "Exists on network", + "lastSynced": "Last synced", + + "titleAdvancedInfo": "Advanced info", + "encPassword": "Encrypted password", + "encPrivatekey": "Encrypted private key", + "saved": "Saved", + + "revealLink": "Reveal", + "hideLink": "Hide", + + "true": "True", + "false": "False" + } + }, + + "addressBook": { + "title": "Address book", + + "contactCount": "{{count, number}} contact", + "contactCount_plural": "{{count, number}} contacts", + "contactCountEmpty": "No contacts", + + "buttonAddContact": "Add contact" + }, + + "myTransactions": { + "title": "Transactions", + "searchPlaceholder": "Search transactions...", + "columnFrom": "From", + "columnTo": "To", + "columnValue": "Value", + "columnTime": "Time" + }, + + "status": "KristWeb 2 is still in development. If you are not a donor, then you should not be here. Do not host this website.", + + "addWallet": { + "dialogTitle": "Add wallet", + "dialogTitleCreate": "Create wallet", + "dialogTitleEdit": "Edit wallet", + "dialogOkAdd": "Add", + "dialogOkCreate": "Create", + "dialogOkEdit": "Save", + "dialogAddExisting": "Add existing wallet", + + "walletLabel": "Wallet label", + "walletLabelPlaceholder": "Wallet label (optional)", + "walletLabelMaxLengthError": "No longer than 32 characters", + "walletLabelWhitespaceError": "Must not be only spaces", + + "walletCategory": "Wallet category", + "walletCategoryDropdownNone": "No category", + "walletCategoryDropdownNew": "New", + "walletCategoryDropdownNewPlaceholder": "Category name", + + "walletAddress": "Wallet address", + "walletUsername": "Wallet username", + "walletUsernamePlaceholder": "Wallet username", + "walletPassword": "Wallet password", + "walletPasswordPlaceholder": "Wallet password", + "walletPasswordWarning": "Make sure to save this somewhere <1>secure!", + "walletPasswordRegenerate": "Regenerate", + "walletPrivatekey": "Wallet private key", + "walletPrivatekeyPlaceholder": "Wallet private key", + + "advancedOptions": "Advanced options", + + "walletFormat": "Wallet format", + "walletFormatKristWallet": "KristWallet, KWallet (recommended)", + "walletFormatKristWalletUsernameAppendhashes": "KW-Username (appendhashes)", + "walletFormatKristWalletUsername": "KW-Username (pre-appendhashes)", + "walletFormatJwalelset": "jwalelset", + "walletFormatApi": "Raw/API (advanced users)", + + "walletSave": "Save this wallet in KristWeb", + + "messageSuccessAdd": "Added wallet successfully!", + "messageSuccessCreate": "Created wallet successfully!", + "messageSuccessEdit": "Saved wallet successfully!", + + "errorPasswordRequired": "Password is required.", + "errorPrivatekeyRequired": "Private key is required.", + "errorUnexpectedTitle": "Unexpected error", + "errorUnexpectedDescription": "There was an error while adding the wallet. See console for details.", + "errorUnexpectedEditDescription": "There was an error while editing the wallet. See console for details.", + "errorDuplicateWalletTitle": "Wallet already exists", + "errorDuplicateWalletDescription": "You already have a wallet for that address.", + "errorMissingWalletTitle": "Wallet not found", + "errorMissingWalletDescription": "The wallet you are trying to edit no longer exists.", + "errorDecryptTitle": "Incorrect master password", + "errorDecryptDescription": "Failed to decrypt the wallet password. Is the master password correct?", + "errorWalletLimitTitle": "Wallet limit reached", + "errorWalletLimitDescription": "You currently cannot add any more wallets." + }, + + "addContact": { + "modalTitle": "Add contact", + "modalTitleEdit": "Edit contact", + + "buttonSubmit": "Add", + "buttonSubmitEdit": "Save", + + "contactLabel": "Label", + "contactLabelPlaceholder": "Contact label (optional)", + "contactLabelMaxLengthError": "No longer than 32 characters", + "contactLabelWhitespaceError": "Must not be only spaces", + + "contactAddressLabel": "Address or name", + + "messageSuccessAdd": "Added contact successfully!", + "messageSuccessEdit": "Saved contact successfully!", + + "errorDuplicateContactTitle": "Contact already exists", + "errorDuplicateContactDescription": "You already have a contact for that address.", + "errorMissingContactTitle": "Contact not found", + "errorMissingContactDescription": "The contact you are trying to edit no longer exists.", + "errorContactLimitTitle": "Contact limit reached", + "errorContactLimitDescription": "You currently cannot add any more contacts." + }, + + "dashboard": { + "siteTitle": "Dashboard", + + "inDevBanner": "Welcome to the KristWeb v2 private beta! This site is still in development, so most features are currently missing. Please report all bugs on <1>GitHub. Thanks!", + + "walletOverviewCardTitle": "Wallets", + "walletOverviewTotalBalance": "Total balance", + "walletOverviewNames": "Names", + "walletOverviewNamesCount": "{{count, number}} name", + "walletOverviewNamesCount_plural": "{{count, number}} names", + "walletOverviewNamesCountEmpty": "No names", + "walletOverviewSeeMore": "See all {{count, number}}...", + "walletOverviewAddWallets": "Add wallets...", + + "transactionsCardTitle": "Transactions", + "transactionsError": "There was an error fetching your transactions. See the console for details.", + + "blockValueCardTitle": "Block value", + "blockValueBaseValue": "Base value (<1>)", + "blockValueBaseValueNames": "{{count, number}} name", + "blockValueBaseValueNames_plural": "{{count, number}} names", + "blockValueNextDecrease": "Decreases by <1> in <3>{{count, number}} block", + "blockValueNextDecrease_plural": "Decreases by <1> in <3>{{count, number}} blocks", + "blockValueReset": "Resets in <1>{{count, number}} block", + "blockValueReset_plural": "Resets in <1>{{count, number}} blocks", + "blockValueEmptyDescription": "The block value increases when <1>names are purchased.", + + "blockDifficultyCardTitle": "Block difficulty", + "blockDifficultyError": "There was an error fetching the block difficulty. See the console for details.", + "blockDifficultyHashRate": "Approx. <1 />", + "blockDifficultyHashRateTooltip": "Estimated combined network mining hash rate, based on the current work.", + "blockDifficultyChartWork": "Block Difficulty", + "blockDifficultyChartLinear": "Linear", + "blockDifficultyChartLog": "Logarithmic", + + "motdCardTitle": "Server MOTD", + "motdDebugMode": "This server is an unofficial development server. Balances and transactions can be manipulated. Proceed with caution.", + + "whatsNewCardTitle": "What's new", + "whatsNewButton": "What's new", + + "tipsCardTitle": "Tip of the day", + "tipsPrevious": "Prev", + "tipsNext": "Next", + "tips": { + "0": "Check out what's new in Krist and KristWeb on the [What's New page](/whatsnew)!", + "1": "You can quickly navigate through tables with the arrow keys on desktop.", + "2": "You can click on table headers to sort them.", + "3": "You can filter by categories in the [My Wallets](/wallets) page by clicking the filter icon in the table header.", + "4": "The [settings page](/settings) has many advanced options to personalise your KristWeb experience.", + "5": "Generate pre-filled transaction links with the new [Request page](/request).", + "6": "Be sure to backup [your wallets](/wallets)!", + "7": "Quickly search the Krist network with the keyboard shortcut Ctrl+K (Cmd+K on macOS).", + "8": "Add contacts in the [address book](/contacts) to quickly send them transactions.", + "9": "A 'bumped' transaction is a transaction sent to and from the same address.", + "10": "The 'block difficulty' chart can be shown with a logarithmic scale to see small changes easier at lower difficulties.", + "11": "The date format can be changed in the [advanced settings](/settings).", + "12": "You can see the [lowest mined block hashes](/network/blocks/lowest).", + "13": "The most recently purchased names can be seen on the [Network Names page](/network/names/new).", + "14": "The block value increases when [names](/network/names) are purchased." + } + }, + + "credits": { + "title": "Credits", + "madeBy": "Made by <1>{{authorName}}", + "hostedBy": "Hosted by <1>{{host}}", + "supportersTitle": "Supporters", + "supportersDescription": "This project was made possible by the following amazing supporters:", + "supportButton": "Support KristWeb", + "translatorsTitle": "Translators", + "translatorsDescription": "This project was translated by the following amazing contributors:", + "translateButton": "Translate KristWeb", + "tmpim": "Created by tmpim", + + "versionInfo": { + "version": "Version", + "commitHash": "Commit", + "buildTime": "Build time" + } + }, + + "settings": { + "siteTitle": "Settings", + "title": "Settings", + + "messageSuccess": "Setting changed successfully!", + + "settingIntegerSave": "Save", + + "menuLanguage": "Language", + + "subMenuAutoRefresh": "Auto-refresh", + "autoRefreshTables": "Auto-refresh tables", + "autoRefreshTablesDescription": "Whether or not large table listings (e.g. transactions, names) should automatically refresh when a change is detected on the network.", + "autoRefreshAddressPage": "Auto-refresh address page", + "autoRefreshNamePage": "Auto-refresh name page", + + "subMenuAdvanced": "Advanced settings", + "alwaysIncludeMined": "Always include mined transactions in transaction listings (may require refresh)", + "copyNameSuffixes": "Include suffix when copying names", + "addressCopyButtons": "Show copy buttons next to all addresses", + "nameCopyButtons": "Show copy buttons next to all names", + "blockHashCopyButtons": "Show copy buttons next to all block hashes", + "showRelativeDates": "Show relative dates instead of absolute ones if recent", + "showRelativeDatesDescription": "Everywhere on the site, if a date is less than 7 days ago, it will show as a relative date instead.", + "showNativeDates": "Show dates in a native date format from the language", + "showNativeDatesDescription": "If disabled, dates will always be shown as YYYY/MM/DD HH:mm:ss", + "transactionsHighlightOwn": "Highlight own transactions in the transactions table", + "transactionsHighlightVerified": "Highlight verified addresses in the transactions table", + "transactionDefaultRaw": "Default to the 'Raw' tab instead of 'CommonMeta' on the transaction page", + "defaultPageSize": "Default page size for table listings", + "tableHotkeys": "Enable table navigation hotkeys (left and right arrows)", + + "subMenuDebug": "Debug settings", + "advancedWalletFormats": "Advanced wallet formats", + "menuTranslations": "Translations", + + "subTitleTranslations": "Translations", + + "translations": { + "errorMissingLanguages": "The languages.json file seems to be missing. Was KristWeb compiled correctly?", + "errorNoKeys": "No translation keys", + + "columnLanguageCode": "Code", + "columnLanguage": "Language", + "columnKeys": "Keys", + "columnMissingKeys": "Missing keys", + "columnProgress": "Progress", + + "tableUntranslatedKeys": "Untranslated keys", + "columnKey": "Key", + "columnEnglishString": "English string", + + "importJSON": "Import JSON", + "exportCSV": "Export CSV", + + "importedLanguageTitle": "Imported language" + } + }, + + "breadcrumb": { + "dashboard": "Dashboard", + "wallets": "Wallets", + + "settings": "Settings", + "settingsDebug": "Debug", + "settingsTranslations": "Translations" + }, + + "ws": { + "errorToken": "There was an error connecting to the Krist websocket server.", + "errorWS": "There was an error connecting to the Krist websocket server (code <1>{{code}})." + }, + + "rateLimitTitle": "Rate limit hit", + "rateLimitDescription": "Too many requests were sent to the Krist server in a short period of time. This is probably caused by a bug!", + + "address": { + "title": "Address", + + "walletLabel": "Label:", + "walletCategory": "Category:", + "contactLabel": "Contact:", + + "balance": "Current balance", + "names": "Names", + "nameCount": "{{count, number}} name", + "nameCount_plural": "{{count, number}} names", + "nameCountEmpty": "No names", + "firstSeen": "First seen", + + "buttonSendKrist": "Send Krist to {{address}}", + "buttonTransferKrist": "Transfer Krist to {{address}}", + "buttonAddContact": "Add to address book", + "buttonEditContact": "Edit contact", + "buttonEditWallet": "Edit wallet", + + "tooltipV1Address": "Transactions cannot be sent to v1 addresses, as they have been deprecated.", + + "cardRecentTransactionsTitle": "Recent transactions", + "cardNamesTitle": "Names", + + "transactionsError": "There was an error fetching the transactions. See the console for details.", + "namesError": "There was an error fetching the names. See the console for details.", + + "namePurchased": "Purchased <1 />", + "nameReceived": "Received <1 />", + "namesSeeMore": "See all {{count, number}}...", + + "resultInvalidTitle": "Invalid address", + "resultInvalid": "That does not look like a valid Krist address.", + "resultNotFoundTitle": "Address not found", + "resultNotFound": "That address has not yet been initialised on the Krist network.", + + "verifiedCardTitle": "Verified address", + "verifiedInactive": "This service is not currently active.", + "verifiedWebsiteButton": "Visit website" + }, + + "transactionSummary": { + "itemID": "Transaction ID: {{id}}", + "itemFrom": "<0>From: <1 />", + "itemTo": "<0>To: <1 />", + "itemName": "<0>Name: <1 />", + "itemARecord": "<0>A record: <1 />", + "itemARecordRemoved": "(removed)", + "seeMore": "See all {{count, number}}..." + }, + + "transactions": { + "title": "Network Transactions", + "myTransactionsTitle": "My Transactions", + "nameHistoryTitle": "Name History", + "nameTransactionsTitle": "Name Transactions", + "searchTitle": "Transaction Search", + + "siteTitleWallets": "My Transactions", + "siteTitleNetworkAll": "Network Transactions", + "siteTitleNetworkAddress": "{{address}}'s Transactions", + "siteTitleNameHistory": "Name History", + "siteTitleNameSent": "Name Transactions", + "siteTitleSearch": "Transaction Search", + + "subTitleSearchAddress": "Involving {{address}}", + "subTitleSearchName": "Involving {{name}}", + "subTitleSearchMetadata": "With metadata '{{query}}'", + + "columnID": "ID", + "columnType": "Type", + "columnFrom": "From", + "columnTo": "To", + "columnValue": "Value", + "columnName": "Name", + "columnMetadata": "Metadata", + "columnTime": "Time", + + "tableTotal": "{{count, number}} item", + "tableTotal_plural": "{{count, number}} items", + "tableTotalEmpty": "No items", + + "includeMined": "Include mined transactions", + + "resultInvalidTitle": "Invalid address", + "resultInvalid": "That does not look like a valid Krist address.", + + "types": { + "transferred": "Transferred", + "sent": "Sent", + "received": "Received", + "mined": "Mined", + "name_a_record": "Updated name", + "name_transferred": "Moved name", + "name_sent": "Sent name", + "name_received": "Received name", + "name_purchased": "Purchased name", + "bumped": "Bumped", + "unknown": "Unknown" + } + }, + + "names": { + "titleWallets": "My Names", + "titleNetworkAll": "Network Names", + "titleNetworkAddress": "Network Names", + + "siteTitleWallets": "My Names", + "siteTitleNetworkAll": "Network Names", + "siteTitleNetworkAddress": "{{address}}'s Names", + + "columnName": "Name", + "columnOwner": "Owner", + "columnOriginalOwner": "Original Owner", + "columnRegistered": "Registered", + "columnUpdated": "Updated", + "columnARecord": "A Record", + "columnUnpaid": "Unpaid Blocks", + + "actions": "Actions", + "actionsSendKrist": "Send Krist", + "actionsTransferKrist": "Transfer Krist", + "actionsUpdateARecord": "Update A record", + "actionsTransferName": "Transfer name", + + "tableTotal": "{{count, number}} name", + "tableTotal_plural": "{{count, number}} names", + "tableTotalEmpty": "No names", + + "resultInvalidTitle": "Invalid address", + "resultInvalid": "That does not look like a valid Krist address.", + + "purchaseButton": "Purchase name" + }, + + "name": { + "title": "Name", + + "buttonSendKrist": "Send Krist to {{name}}", + "buttonTransferKrist": "Transfer Krist to {{name}}", + "buttonARecord": "Update A record", + "buttonTransferName": "Transfer name", + + "owner": "Owned by", + "originalOwner": "Purchased by", + "registered": "Registered", + "updated": "Last updated", + "unpaid": "Unpaid blocks", + "unpaidCount": "{{count, number}} block", + "unpaidCount_plural": "{{count, number}} blocks", + "aRecord": "A record", + "aRecordEditTooltip": "Update A record", + + "cardRecentTransactionsTitle": "Recent transactions", + "cardHistoryTitle": "Name history", + "transactionsError": "There was an error fetching the transactions. See the console for details.", + "historyError": "There was an error fetching the name history. See the console for details.", + + "resultInvalidTitle": "Invalid name", + "resultInvalid": "That does not look like a valid Krist name.", + "resultNotFoundTitle": "Name not found", + "resultNotFound": "That name does not exist." + }, + + "blocks": { + "title": "Network Blocks", + "titleLowest": "Lowest Blocks", + "siteTitle": "Network Blocks", + "siteTitleLowest": "Lowest Blocks", + + "columnHeight": "Height", + "columnAddress": "Miner", + "columnHash": "Block Hash", + "columnValue": "Value", + "columnDifficulty": "Difficulty", + "columnTime": "Time", + + "tableTotal": "{{count, number}} block", + "tableTotal_plural": "{{count, number}} blocks", + "tableTotalEmpty": "No blocks" + }, + + "block": { + "title": "Block", + "siteTitle": "Block", + "siteTitleBlock": "Block #{{id, number}}", + "subTitleBlock": "#{{id, number}}", + + "height": "Height", + "miner": "Miner", + "value": "Value", + "time": "Time", + "hash": "Hash", + "difficulty": "Difficulty", + + "previous": "Prev", + "previousTooltip": "Previous block (#{{id, number}})", + "previousTooltipNone": "Previous block", + "next": "Next", + "nextTooltip": "Next block (#{{id, number}})", + "nextTooltipNone": "Next block", + + "resultInvalidTitle": "Invalid block height", + "resultInvalid": "That does not look like a valid block height.", + "resultNotFoundTitle": "Block not found", + "resultNotFound": "That block does not exist." + }, + + "transaction": { + "title": "Transaction", + "siteTitle": "Transaction", + "siteTitleTransaction": "Transaction #{{id, number}}", + "subTitleTransaction": "#{{id, number}}", + + "type": "Type", + "from": "From", + "to": "To", + "address": "Address", + "name": "Name", + "value": "Value", + "time": "Time", + "aRecord": "A record", + + "cardMetadataTitle": "Metadata", + "tabCommonMeta": "CommonMeta", + "tabRaw": "Raw", + + "commonMetaError": "CommonMeta parsing failed.", + "commonMetaParsed": "Parsed records", + "commonMetaParsedHelp": "These values were not directly contained in the transaction metadata, but they were inferred by the CommonMeta parser.", + "commonMetaCustom": "Transaction records", + "commonMetaCustomHelp": "These values were directly contained in the transaction metadata.", + "commonMetaColumnKey": "Key", + "commonMetaColumnValue": "Value", + + "cardRawDataTitle": "Raw data", + "cardRawDataHelp": "The transaction exactly as it was returned by the Krist API.", + + "rawDataColumnKey": "Key", + "rawDataColumnValue": "Value", + + "resultInvalidTitle": "Invalid transaction ID", + "resultInvalid": "That does not look like a valid transaction ID.", + "resultNotFoundTitle": "Transaction not found", + "resultNotFound": "That transaction does not exist." + }, + + "apiErrorResult": { + "resultUnknownTitle": "Unknown error", + "resultUnknown": "See console for details." + }, + + "noWalletsResult": { + "title": "No wallets yet", + "subTitle": "You currently have no wallets saved in KristWeb, so there is nothing to see here yet. Would you like to add a wallet?", + "subTitleSendTransaction": "You currently have no wallets saved in KristWeb, so you can't make a transaction yet. Would you like to add a wallet?", + "button": "Add wallets", + "buttonNetworkTransactions": "Network transactions", + "buttonNetworkNames": "Network names" + }, + + "backups": { + "importButton": "Import backup", + "exportButton": "Export backup" + }, + + "import": { + "description": "Paste the backup code (or import from a file below) and enter the corresponding master password. Backups from KristWeb v1 are also supported.", + + "masterPasswordPlaceholder": "Master password", + "masterPasswordRequired": "Master password is required.", + "masterPasswordIncorrect": "Master password is incorrect.", + + "appMasterPasswordRequired": "You must be authenticated to import wallets.", + + "fromFileButton": "Import from file", + "textareaPlaceholder": "Paste backup code here", + "textareaRequired": "Backup code is required.", + "fileErrorTitle": "Import error", + "fileErrorNotText": "The imported file must be a text file.", + + "overwriteCheckboxLabel": "Update existing wallet labels if there are conflicts", + + "modalTitle": "Import backup", + "modalButton": "Import", + + "detectedFormat": "<0>Detected format: <2 />", + "detectedFormatKristWebV1": "KristWeb v1", + "detectedFormatKristWebV2": "KristWeb v2", + "detectedFormatInvalid": "Invalid!", + + "progress": "Importing <1>{{count, number}} item...", + "progress_plural": "Importing <1>{{count, number}} items...", + + "decodeErrors": { + "atob": "The backup could not be decoded as it is not valid base64!", + "json": "The backup could not be decoded as it is not valid JSON!", + "missingTester": "The backup could not be decoded as it is missing a 'tester' key!", + "missingSalt": "The backup could not be decoded as it is missing a 'salt' key!", + "invalidTester": "The backup could not be decoded as the 'tester' key is the wrong type!", + "invalidSalt": "The backup could not be decoded as the 'salt' key is the wrong type!", + "invalidWallets": "The backup could not be decoded as the 'wallets' key is the wrong type!", + "invalidFriends": "The backup could not be decoded as the 'friends' key is the wrong type!", + "invalidContacts": "The backup could not be decoded as the 'contacts' key is the wrong type!", + "unknown": "The backup could not be decoded due to an unknown error. See console for details." + }, + + "walletMessages": { + "success": "Wallet imported successfully.", + "successSkipped": "A wallet with the same address ({{address}}) and settings already exists, so it was skipped.", + "successUpdated": "A wallet with the same address ({{address}}) already exists. Its label was updated to \"{{label}}\"", + "successSkippedNoOverwrite": "A wallet with the same address ({{address}}) already exists, and you chose not to overwrite the label, so it was skipped.", + "successImportSkipped": "A wallet with the same address ({{address}}) was already imported, so it was skipped.", + + "warningSyncNode": "This wallet had a custom sync node, which is not supported in KristWeb v2. The sync node was skipped.", + "warningIcon": "This wallet had a custom icon, which is not supported in KristWeb v2. The icon was skipped.", + "warningLabelInvalid": "The label for this wallet was invalid. The label was skipped.", + "warningCategoryInvalid": "The category for this wallet was invalid. The category was skipped.", + "warningAdvancedFormat": "This wallet uses an advanced format ({{format}}), which has limited support in KristWeb v2.", + + "errorInvalidTypeString": "This wallet was not a string!", + "errorInvalidTypeObject": "This wallet was not an object!", + "errorDecrypt": "This wallet could not be decrypted!", + "errorPasswordDecrypt": "The password for this wallet could not be decrypted!", + "errorDataJSON": "The decrypted data was not valid JSON!", + "errorUnknownFormat": "This wallet uses an unknown or unsupported format!", + "errorFormatMissing": "This wallet is missing a format!", + "errorUsernameMissing": "This wallet is missing a username!", + "errorPasswordMissing": "This wallet is missing a password!", + "errorPrivateKeyMissing": "This wallet is missing a private key!", + "errorMasterKeyMissing": "This wallet is missing a master key!", + "errorPrivateKeyMismatch": "This wallet's password did not map to its stored private key!", + "errorMasterKeyMismatch": "This wallet's password did not map to its stored master key!", + "errorLimitReached": "You reached the wallet limit. You currently cannot add any more wallets.", + "errorUnknown": "An unknown error occurred. See console for details." + }, + + "contactMessages": { + "success": "Contact imported successfully.", + "successSkipped": "A contact with the same address ({{address}}) and settings already exists, so it was skipped.", + "successUpdated": "A contact with the same address ({{address}}) already exists. Its label was updated to \"{{label}}\"", + "successSkippedNoOverwrite": "A contact with the same address ({{address}}) already exists, and you chose not to overwrite the label, so it was skipped.", + "successImportSkipped": "A contact with the same address ({{address}}) was already imported, so it was skipped.", + + "warningSyncNode": "This contact had a custom sync node, which is not supported in KristWeb v2. The sync node was skipped.", + "warningIcon": "This contact had a custom icon, which is not supported in KristWeb v2. The icon was skipped.", + "warningLabelInvalid": "The label for this contact was invalid. The label was skipped.", + + "errorInvalidTypeString": "This contact was not a string!", + "errorInvalidTypeObject": "This contact was not an object!", + "errorDecrypt": "This contact could not be decrypted!", + "errorDataJSON": "The decrypted data was not valid JSON!", + "errorAddressMissing": "This contact is missing an address!", + "errorAddressInvalid": "This contact's address is invalid!", + "errorLimitReached": "You reached the contact limit. You currently cannot add any more contacts.", + "errorUnknown": "An unknown error occurred. See console for details." + }, + + "results": { + "noneImported": "No new wallets were imported.", + + "walletsImported": "<0>{{count, number}} new wallet was imported.", + "walletsImported_plural": "<0>{{count, number}} new wallets were imported.", + "walletsSkipped": "{{count, number}} wallet was skipped.", + "walletsSkipped_plural": "{{count, number}} wallets were skipped.", + + "contactsImported": "<0>{{count, number}} new contact was imported.", + "contactsImported_plural": "<0>{{count, number}} new contacts were imported.", + "contactsSkipped": "{{count, number}} contact was skipped.", + "contactsSkipped_plural": "{{count, number}} contacts were skipped.", + + "warnings": "There was <1>{{count, number}} warning while importing your backup.", + "warnings_plural": "There were <1>{{count, number}} warnings while importing your backup.", + "errors": "There was <1>{{count, number}} error while importing your backup.", + "errors_plural": "There were <1>{{count, number}} errors while importing your backup.", + + "treeHeaderWallets": "Wallets", + "treeHeaderContacts": "Contacts", + + "treeWallet": "Wallet {{id}}", + "treeContact": "Contact {{id}}" + } + }, + + "export": { + "modalTitle": "Export backup", + + "description": "This secret code contains your wallets and address book contacts. You can use it to import them in another browser, or to back them up. You will still need your master password to import the wallets in the future. <1>Do not share this code with anyone.", + "size": "Size: <1 />", + + "buttonSave": "Save to file", + "buttonCopy": "Copy to clipboard" + }, + + "walletLimitMessage": "You have more wallets stored than KristWeb supports. This was either caused by a bug, or you bypassed it intentionally. Expect issues with syncing.", + + "optionalFieldUnset": "(unset)", + + "addressPicker": { + "placeholder": "Choose a recipient", + "placeholderWalletsOnly": "Choose a wallet", + "placeholderNoWallets": "Address or name", + "placeholderNoWalletsNoNames": "Address", + + "hintCurrentBalance": "Current balance: <1 />", + + "errorAddressRequired": "Address is required.", + "errorRecipientRequired": "Recipient is required.", + "errorWalletRequired": "Wallet is required.", + + "errorInvalidAddress": "Invalid address or name.", + "errorInvalidAddressOnly": "Invalid address.", + "errorInvalidRecipient": "Invalid recipient. Must be an address or name.", + "errorInvalidWalletsOnly": "Invalid wallet address.", + "errorEqual": "Recipient cannot be the same as the sender.", + + "categoryWallets": "Wallets", + "categoryOtherWallets": "Other wallets", + "categoryAddressBook": "Address book", + "categoryExactAddress": "Exact address", + "categoryExactName": "Exact name", + + "addressHint": "Balance: <1 />", + "addressHintWithNames": "Names: <1>{{names, number}}", + "nameHint": "Owner: <1 />", + "nameHintNotFound": "Name not found.", + "walletHint": "Wallet: <1 />" + }, + + "sendTransaction": { + "title": "Send transaction", + "siteTitle": "Send transaction", + + "modalTitle": "Send transaction", + "modalSubmit": "Send", + + "buttonSubmit": "Send", + + "labelFrom": "From wallet", + "labelTo": "To address/name", + "labelAmount": "Amount", + "labelMetadata": "Metadata", + "placeholderMetadata": "Optional metadata", + + "buttonMax": "Max", + + "errorAmountRequired": "Amount is required.", + "errorAmountNumber": "Amount must be a number.", + "errorAmountTooLow": "Amount must be at least 1.", + "errorAmountTooHigh": "Insufficient funds in wallet.", + + "errorMetadataTooLong": "Metadata must be less than 256 characters.", + "errorMetadataInvalid": "Metadata contains invalid characters.", + + "errorWalletGone": "That wallet no longer exists.", + "errorWalletDecrypt": "Your wallet could not be decrypted.", + + "errorParameterTo": "Invalid recipient.", + "errorParameterAmount": "Invalid amount.", + "errorParameterMetadata": "Invalid metadata.", + "errorInsufficientFunds": "Insufficient funds in wallet.", + "errorNameNotFound": "The recipient name could not be found.", + + "errorUnknown": "Unknown error sending transaction. See console for details.", + + "payLargeConfirmHalf": "Are you sure you want to send <1 />? This is over half your balance!", + "payLargeConfirmAll": "Are you sure you want to send <1 />? This is your entire balance!", + + "errorNotificationTitle": "Transaction failed", + "successNotificationTitle": "Transaction successful", + "successNotificationContent": "You sent <1 /> from <3 /> to <5 />.", + "successNotificationButton": "View transaction" + }, + + "authFailed": { + "title": "Auth failed", + "message": "You do not own this address.", + "messageLocked": "This address was locked.", + "alert": "Message from the Krist server:" + }, + + "whatsNew": { + "title": "What's new", + "siteTitle": "What's new", + + "titleKrist": "Krist", + "titleKristWeb": "KristWeb", + + "tooltipGitHub": "View on GitHub", + + "cardWhatsNewTitle": "What's New", + "cardCommitsTitle": "Commits", + "cardCommitsSeeMore": "See more", + + "new": "New!" + }, + + "namePicker": { + "placeholder": "Choose a name", + "placeholderMultiple": "Choose names", + + "buttonAll": "All", + + "warningTotalLimit": "You seem to have more than 1,000 names, which is not yet supported in KristWeb v2. Please post an issue on GitHub.", + "errorLookup": "There was an error fetching the names. See the console for details." + }, + + "nameTransfer": { + "modalTitle": "Transfer names", + + "labelNames": "Names", + "labelRecipient": "Recipient", + + "buttonSubmit": "Transfer names", + + "errorNameRequired": "At least one name is required.", + + "errorWalletGone": "That wallet no longer exists.", + "errorWalletDecrypt": "The wallet \"{{address}}\" could not be decrypted.", + "errorParameterNames": "Invalid names.", + "errorParameterRecipient": "Invalid recipient.", + "errorNameNotFound": "One or more names could not be found.", + "errorNotNameOwner": "You are not the owner of one or more names.", + "errorUnknown": "Unknown error transferring names. See console for details.", + "errorNotificationTitle": "Name transfer failed", + + // Note that the zero and singular cases of these warnings will never be + // shown, but they're provided for i18n compatibility. + "warningMultipleNames": "Are you sure you want to transfer <1>{{count, number}} name to <3 />?", + "warningMultipleNames_plural": "Are you sure you want to transfer <1>{{count, number}} names to <3 />?", + "warningAllNames": "Are you sure you want to transfer <1>{{count, number}} name to <3 />? This is all your names!", + "warningAllNames_plural": "Are you sure you want to transfer <1>{{count, number}} names to <3 />? This is all your names!", + + "successMessage": "Name transferred successfully", + "successMessage_plural": "Names transferred successfully", + "successDescription": "Transferred <1>{{count, number}} name to <3 />.", + "successDescription_plural": "Transferred <1>{{count, number}} names to <3 />.", + + "progress": "Transferring <1>{{count, number}} name...", + "progress_plural": "Transferring <1>{{count, number}} names..." + }, + + "nameUpdate": { + "modalTitle": "Update names", + + "labelNames": "Names", + "labelARecord": "A record", + "placeholderARecord": "A record (optional)", + + "buttonSubmit": "Update names", + + "errorNameRequired": "At least one name is required.", + + "errorWalletGone": "That wallet no longer exists.", + "errorWalletDecrypt": "The wallet \"{{address}}\" could not be decrypted.", + "errorParameterNames": "Invalid names.", + "errorParameterARecord": "Invalid A record.", + "errorNameNotFound": "One or more names could not be found.", + "errorNotNameOwner": "You are not the owner of one or more names.", + "errorUnknown": "Unknown error updating names. See console for details.", + "errorNotificationTitle": "Name transfer failed", + + "successMessage": "Name updated successfully", + "successMessage_plural": "Names updated successfully", + "successDescription": "Updated <1>{{count, number}} names.", + "successDescription_plural": "Updated <1>{{count, number}} names.", + + "progress": "Updating <1>{{count, number}} name...", + "progress_plural": "Updating <1>{{count, number}} names..." + }, + + "noNamesResult": { + "title": "No names yet", + "subTitle": "You currently have no names in any of your wallets saved in KristWeb, so there is nothing to see here yet. Would you like to purchase a name?", + "button": "Purchase name" + }, + + "namePurchase": { + "modalTitle": "Purchase name", + + "nameCost": "Cost to purchase: <1 />", + + "labelWallet": "Wallet", + "labelName": "Name", + "placeholderName": "Name", + + "buttonSubmit": "Purchase (<1 />)", + + "errorNameRequired": "Name is required.", + "errorInvalidName": "Invalid name.", + "errorNameTooLong": "Name is too long.", + "errorNameTaken": "That name is already taken!", + "errorInsufficientFunds": "Your wallet does not have enough funds to purchase a name.", + + "errorWalletGone": "That wallet no longer exists.", + "errorWalletDecrypt": "The wallet \"{{address}}\" could not be decrypted.", + "errorUnknown": "Unknown error purchasing name. See console for details.", + "errorNotificationTitle": "Name purchase failed", + + "successMessage": "Name purchased successfully", + "successNotificationButton": "View name", + + "nameAvailable": "Name is available!" + }, + + "purchaseKrist": { + "modalTitle": "Purchase Krist" + }, + + "syncWallets": { + "errorMessage": "Error syncing wallets", + "errorDescription": "There was an error while syncing your wallets. See console for details." + } +} diff --git a/public/locales/fr.json b/public/locales/fr.json new file mode 100644 index 0000000..d6acffc --- /dev/null +++ b/public/locales/fr.json @@ -0,0 +1,109 @@ +{ + "app": { + "name": "KristWeb" + }, + + "nav": { + "connection": { + "online": "En ligne", + "offline": "Hors ligne", + "connecting": "En Connexion" + }, + + "search": "Rechercher sur le réseau Krist", + + "send": "Envoyer", + "request": "Requêter" + }, + + "sidebar": { + "totalBalance": "Solde Total", + "guestIndicator": "Navigation en tant qu'invité", + "dashboard": "Tableau de bord", + "myWallets": "Mes portefeuilles", + "addressBook": "Carnet d'adresses", + "transactions": "Transactions", + "names": "Noms", + "mining": "Minage", + "network": "Réseau", + "blocks": "Blocs", + "statistics": "Statistiques", + "madeBy": "Fait par <1>{{authorName}}", + "hostedBy": "Hébergé par <1>{{host}}", + "github": "GitHub", + "credits": "Crédits" + }, + + "dialog": { + "close": "Fermer" + }, + + "pagination": { + "justPage": "Page {{page}}", + "pageWithTotal": "Page {{page}} de {{total}}" + }, + + "loading": "Chargement...", + + "masterPassword": { + "dialogTitle": "Mot de passe maître", + "passwordPlaceholder": "Mot de passe maître", + "browseAsGuest": "Naviguer en tant qu'invité", + "createPassword": "Créer un mot de passe", + "logIn": "Connexion", + "forgotPassword": "Mot de passe oublié?", + "intro": "Entrez un mot de passe maître pour crypter vos portefeuilles ou parcourez KristWeb en tant qu'invité <1>.", + "dontForgetPassword": "N'oubliez jamais ce mot de passe. Si vous l'oubliez, vous devrez créer un nouveau mot de passe et ajouter à nouveau vos portefeuilles.", + "loginIntro": "Entrez un mot de passe maître pour accéder à vos portefeuilles ou parcourez KristWeb en tant qu'invité.", + "learnMore": "en savoir plus", + "errorPasswordRequired": "Mot de passe requis.", + "errorPasswordUnset": "Le mot de passe maître n'a pas été configuré.", + "errorPasswordIncorrect": "Mot de passe incorrect.", + "errorStorageCorrupt": "Le stockage du portefeuille est corrompu.", + "errorUnknown": "Erreur inconnue.", + "helpWalletStorageTitle": "Aide: stockage de portefeuille", + "helpWalletStorage": "Lorsque vous ajoutez un portefeuille à KristWeb, la clé privée du portefeuille est enregistrée dans le stockage local de votre navigateur et chiffrée avec votre mot de passe maître.\nChaque portefeuille que vous enregistrez est chiffré à l'aide du même mot de passe maître et vous devrez le saisir à chaque fois vous ouvrez KristWeb. Votre portefeuille Krist n'est en aucun cas modifié.\nLorsque vous naviguez sur KristWeb en tant qu'invité, vous n'avez pas besoin de saisir votre mot de passe maître, mais cela signifie également que vous ne pourrez pas ajouter ni utiliser vos portefeuilles. Vous pourrez toutefois explorer le réseau Krist." + }, + + "myWallets": { + "title": "Portefeuilles", + "manageBackups": "Gérer les sauvegardes", + "createWallet": "Créer un portefeuille", + "addExistingWallet": "Ajouter un portefeuille existant", + "searchPlaceholder": "Chercher un portefeuille...", + "categoryDropdownAll": "Toutes catégories", + "columnLabel": "Étiquette", + "columnAddress": "Addresse", + "columnBalance": "Solde", + "columnNames": "Noms", + "columnCategory": "Catégorie", + "columnFirstSeen": "Vu la première fois", + "nameCount": "{{count}} nom", + "nameCount_plural": "{{count}} noms", + "firstSeen": "Vu la première fois le {{date}}" + }, + + "myTransactions": { + "title": "Transactions", + "searchPlaceholder": "Chercher une transaction...", + "columnFrom": "De", + "columnTo": "À", + "columnValue": "Montant", + "columnTime": "Temps" + }, + + "addWallet": { + "dialogTitle": "Ajouter un portefeuille", + "dialogTitleCreate": "Créer un portefeuille" + }, + + "credits": { + "madeBy": "Fait par <1>{{authorName}}", + "supportersTitle": "Supporteurs", + "supportersDescription": "Ce projet a été rendu possible par les formidables supporters suivants:", + "supportButton": "Supporter KristWeb", + "translatorsTitle": "Traducteurs", + "translatorsDescription": "Ce projet a été traduit par les formidables contributeurs suivants:", + "translateButton": "Traduire KristWeb" + } +} diff --git a/public/locales/nl.json b/public/locales/nl.json new file mode 100644 index 0000000..706d9cc --- /dev/null +++ b/public/locales/nl.json @@ -0,0 +1,744 @@ +{ + "app": { + "name": "KristWeb" + }, + + "nav": { + "connection": { + "online": "Online", + "offline": "Offline", + "connecting": "Verbinden" + }, + + "search": { + "placeholder": "Doorzoek het Krist netwerk", + "placeholderShortcut": "Doorzoek het Krist netwerk ({{shortcut}})", + "rateLimitHit": "Niet zo snel alsjeblieft.", + "noResults": "Geen resultaten.", + + "resultAddress": "Adres", + "resultName": "Naam", + "resultNameOwner": "Eigendom van <1 />", + "resultBlockID": "Blok ID", + "resultBlockIDMinedBy": "Gemijnd door <1 />", + "resultTransactionID": "Transactie ID", + "resultTransactions": "Transacties", + "resultTransactionsAddress": "Zoeken naar transacties betreffende <1 />", + "resultTransactionsAddressResult": "<0>{{count, number}} transactie betreffende <2 />", + "resultTransactionsAddressResult_plural": "<0>{{count, number}} transacties betreffende <2 />", + "resultTransactionsName": "Zoeken naar transacties betreffende <1 />", + "resultTransactionsNameResult": "<0>{{count, number}} transactie verzonden naar <2 />", + "resultTransactionsNameResult_plural": "<0>{{count, number}} transacties verzonden naar <2 />", + "resultTransactionsMetadata": "Zoeken naar metagegevens betreffende <1 />", + "resultTransactionsMetadataResult": "<0>{{count, number}} transactie betreffende metagegevens <2 />", + "resultTransactionsMetadataResult_plural": "<0>{{count, number}} transacties betreffende metagegevens <2 />" + }, + + "send": "Verzenden", + "request": "Ontvangen", + + "settings": "Instellingen" + }, + + "sidebar": { + "totalBalance": "Totaalbalans", + "dashboard": "Dashboard", + "myWallets": "Mijn wallets", + "addressBook": "Adresboek", + "transactions": "Transacties", + "names": "Namen", + "mining": "Mijnen", + "network": "Netwerk", + "blocks": "Blokken", + "statistics": "Statistieken", + "madeBy": "Gemaakt door <1>{{authorName}}", + "hostedBy": "Gehost door <1>{{host}}", + "github": "GitHub", + "credits": "Credits", + + "updateTitle": "Update beschikbaar!", + "updateDescription": "Een nieuwe versie van KristWeb is beschikbaar. Herlaad alstublieft.", + "updateReload": "Herladen" + }, + + "dialog": { + "close": "Sluiten", + "yes": "Ja", + "no": "Nee", + "ok": "Oké", + "cancel": "Annuleren" + }, + + "pagination": { + "justPage": "Pagina {{page}}", + "pageWithTotal": "Pagina {{page}} van {{total}}" + }, + + "error": "Fout", + "loading": "Laden...", + + "copy": "Kopiëren naar klembord", + "copied": "Gekopiëerd!", + + "pageNotFound": { + "resultTitle": "Pagina niet gevonden", + "buttonGoBack": "Ga terug" + }, + + "contextualAddressUnknown": "Onbekend", + "contextualAddressNonExistentTooltip": "Dit adres is nog niet geinitialiseerd op het Krist netwerk.", + + "typeahead": { + "emptyLabel": "Geen match gevonden.", + "paginationText": "Extra resultaten weergeven..." + }, + + "masterPassword": { + "dialogTitle": "Hoofdwachtwoord", + "passwordPlaceholder": "Hoofdwachtwoord", + "passwordConfirmPlaceholder": "Bevestig hoofdwachtwoord", + "createPassword": "Creëer wachtwoord", + "logIn": "Log in", + "forgotPassword": "Wachtwoord vergeten?", + "intro2": "Voer een <1>hoofdwachtwoord in om je wallet-sleutels te beschermen. Deze worden in je browser opgeslagen, en je dient je hoofdwachtwoord elke sessie opnieuw in te voeren.", + "learnMore": "meer informatie", + "errorPasswordRequired": "Wachtwoord is vereist.", + "errorPasswordLength": "Moet op zijn minst 1 karakter bevatten.", + "errorPasswordUnset": "Hoofdwachtwoord nog niet ingesteld.", + "errorPasswordIncorrect": "Fout wachtwoord.", + "errorPasswordInequal": "Wachtwoorden moeten overeen komen.", + "errorStorageCorrupt": "Wallet-opslag is corrupt.", + "errorNoPassword": "Hoofdwachtwoord is vereist.", + "errorUnknown": "Onbekende fout.", + "helpWalletStorageTitle": "Help: Wallet-opslag", + "popoverTitle": "Ontsleutel wallets", + "popoverTitleEncrypt": "Versleutel wallets", + "popoverAuthoriseButton": "Autoriseren", + "popoverDescription": "Voer je hoofdwachtwoord in om je wallets te ontsleutelen.", + "popoverDescriptionEncrypt": "Voer je hoofdwachtwoord in om je wallets te versleutelen en te ontsleutelen.", + "forcedAuthWarning": "Je bent automatisch ingelogd door een onveilige debug-instelling." + }, + + "myWallets": { + "title": "Wallets", + "manageBackups": "Beheer backups", + "createWallet": "Creëer wallet", + "addExistingWallet": "Voeg bestaande wallet toe", + "searchPlaceholder": "Doorzoek wallets...", + "categoryDropdownAll": "Alle categorieën", + "columnLabel": "Label", + "columnAddress": "Adres", + "columnBalance": "Balans", + "columnNames": "Namen", + "columnCategory": "Categorie", + "columnFirstSeen": "Introductie", + "nameCount": "{{count, number}} naam", + "nameCount_plural": "{{count, number}} namen", + "firstSeen": "Geïntroduceert op {{date}}", + + "walletCount": "{{count, number}} wallet", + "walletCount_plural": "{{count, number}} wallets", + + "actionsEditTooltip": "Wallet bewerken", + "actionsWalletInfo": "Wallet informatie", + "actionsDelete": "Wallet verwijderen", + "actionsDeleteConfirm": "Weet je zeker dat je deze wallet wil verwijderen?", + "actionsDeleteConfirmDescription": "Als je het wallet-sleutel niet hebt opgeslagen of opgeschreven, is deze voor altijd verloren!", + + "tagDontSave": "Tijdelijk", + "tagDontSaveTooltip": "Tijdelijke wallet", + + "info": { + "title": "Wallet informatie - {{address}}", + + "titleBasicInfo": "Basis informatie", + "id": "ID", + "label": "Label", + "category": "Categorie", + "username": "Gebruikersnaam", + "password": "Wachtwoord", + "privatekey": "Privésleutel", + "format": "Formaat", + + "titleSyncedInfo": "Gesynchroniseerde informatie", + "address": "Adres", + "balance": "Balans", + "names": "Aantal namen", + "firstSeen": "Introductie", + "existsOnNetwork": "Bestaat op het netwerk", + "lastSynced": "Laatst gesynchroniseerd", + + "titleAdvancedInfo": "Geavanceerde informatie", + "encPassword": "Versleuteld wachtwoord", + "encPrivatekey": "Versleutelde sleutel", + "saved": "Opgeslagen", + + "revealLink": "Tonen", + "hideLink": "Verbergen", + + "true": "Ja", + "false": "Nee" + } + }, + + "myTransactions": { + "title": "Transacties", + "searchPlaceholder": "Doorzoek transacties...", + "columnFrom": "Van", + "columnTo": "Naar", + "columnValue": "Waarde", + "columnTime": "Tijd" + }, + + "status": "KristWeb 2 is nog in ontwikkeling. Bent u geen donateur, dan zou u hier niet moeten zijn. Host deze website niet.", + + "addWallet": { + "dialogTitle": "Wallet toevoegen", + "dialogTitleCreate": "Creëer wallet", + "dialogTitleEdit": "Bewerk wallet", + "dialogOkAdd": "Toevoegen", + "dialogOkCreate": "Creëren", + "dialogOkEdit": "Opslaan", + "dialogAddExisting": "Voeg bestaande wallet toe", + + "walletLabel": "Wallet label", + "walletLabelPlaceholder": "Wallet label (optioneel)", + "walletLabelMaxLengthError": "Niet langer dan 32 karakters", + "walletLabelWhitespaceError": "Moet niet alleen spaties bevatten", + + "walletCategory": "Wallet categorie", + "walletCategoryDropdownNone": "Geen categorie", + "walletCategoryDropdownNew": "Nieuw", + "walletCategoryDropdownNewPlaceholder": "Categorienaam", + + "walletAddress": "Wallet adres", + "walletUsername": "Wallet gebruikersnaam", + "walletUsernamePlaceholder": "Wallet gebruikersnaam", + "walletPassword": "Wallet wachtwoord", + "walletPasswordPlaceholder": "Wallet wachtwoord", + "walletPasswordWarning": "Zorg dat je dit ergens <1>veilig bewaard!", + "walletPasswordRegenerate": "Regenereren", + "walletPrivatekey": "Wallet privésleutel", + "walletPrivatekeyPlaceholder": "Wallet privésleutel", + + "advancedOptions": "Geavanceerde opties", + + "walletFormat": "Wallet formaat", + "walletFormatKristWallet": "KristWallet, KWallet (aanbevolen)", + "walletFormatKristWalletUsernameAppendhashes": "KW-Username (appendhashes)", + "walletFormatKristWalletUsername": "KW-Username (pre-appendhashes)", + "walletFormatJwalelset": "jwalelset", + "walletFormatApi": "Rauw/API (geavanceerde gebruikers)", + + "walletSave": "Sla deze wallet op in KristWeb", + + "messageSuccessAdd": "Wallet succesvol toegevoegd!", + "messageSuccessCreate": "Wallet succesvol aangemaakt!", + "messageSuccessEdit": "Wallet succesvol opgeslagen!", + + "errorPasswordRequired": "Wachtwoord is vereist.", + "errorPrivatekeyRequired": "Privésleutel is vereist.", + "errorUnexpectedTitle": "Onverwachte fout", + "errorUnexpectedDescription": "Er is een fout opgetreden bij het toevoegen van de wallet. Zie de console voor details.", + "errorUnexpectedEditDescription": "Er is een fout opgetreden bij het bewerken van de wallet. Zie console voor details.", + "errorDuplicateWalletTitle": "Wallet bestaat al", + "errorDuplicateWalletDescription": "U heeft al een wallet voor dat adres.", + "errorMissingWalletTitle": "Wallet niet gevonden", + "errorMissingWalletDescription": "De wallet die u probeert te bewerken, bestaat niet meer.", + "errorDecryptTitle": "Foutief hoofdwachtwoord", + "errorDecryptDescription": "Ontsleutelen van het wallet-wachtwoord is mislukt. Is het hoofdwachtwoord correct?", + "errorWalletLimitTitle": "Wallet limiet bereikt", + "errorWalletLimitDescription": "U kunt momenteel geen wallets meer toevoegen." + }, + + "dashboard": { + "siteTitle": "Dashboard", + + "inDevBanner": "Welkom bij de privé-bèta van KristWeb v2! Deze site is nog in ontwikkeling, dus de meeste features ontbreken momenteel. Rapporteer alstublieft alle bugs op <1>GitHub. Bedankt!", + + "walletOverviewCardTitle": "Wallets", + "walletOverviewTotalBalance": "Totaalbalans", + "walletOverviewNames": "Namen", + "walletOverviewNamesCount": "{{count, number}} naam", + "walletOverviewNamesCount_plural": "{{count, number}} namen", + "walletOverviewSeeMore": "Zie alle {{count, number}}...", + "walletOverviewAddWallets": "Wallets toevoegen...", + + "transactionsCardTitle": "Transacties", + "transactionsError": "Er was een fout bij het ophalen van de transacties. Zie de console voor details.", + + "blockValueCardTitle": "Blokwaarde", + "blockValueBaseValue": "Basiswaarde (<1>)", + "blockValueBaseValueNames": "{{count, number}} naam", + "blockValueBaseValueNames_plural": "{{count, number}} namen", + "blockValueNextDecrease": "Zal verminderen in <1> in <3>{{count, number}} blok", + "blockValueNextDecrease_plural": "Zal verminderen in <1> in <3>{{count, number}} blokken", + "blockValueReset": "Zal resetten in <1>{{count, number}} blok", + "blockValueReset_plural": "Zal resetten in <1>{{count, number}} blokken", + "blockValueEmptyDescription": "De blokwaarde verhoogt wanneer <1>namen aangeschaft worden", + + "blockDifficultyCardTitle": "Blok moeilijkheidsgraad", + "blockDifficultyError": "Er is een fout opgetreden bij het ophalen van de moeilijkheidsgraad van het blok. Zie de console voor details.", + "blockDifficultyHashRate": "Ongeveer <1 />", + "blockDifficultyHashRateTooltip": "Geschatte hash-snelheid van gecombineerde netwerkmining, gebaseerd op het huidige werk.", + "blockDifficultyChartWork": "Blok moeilijkheidsgraad", + "blockDifficultyChartLinear": "Linear", + "blockDifficultyChartLog": "Logaritmisch", + + "motdCardTitle": "Server MOTD", + "motdDebugMode": "Dit synchronisatieknooppunt is een niet-officiële ontwikkelserver. Saldi en transacties kunnen worden gemanipuleerd. Ga voorzichtig verder.", + + "whatsNewCardTitle": "Wat is er nieuw" + }, + + "credits": { + "title": "Credits", + "madeBy": "Gemaakt door <1>{{authorName}}", + "hostedBy": "Gehost by <1>{{host}}", + "supportersTitle": "Supporters", + "supportersDescription": "Dit project is mogelijk gemaakt door de volgende geweldige supporters:", + "supportButton": "Support KristWeb", + "translatorsTitle": "Vertalers", + "translatorsDescription": "Dit project is vertaald door de volgende geweldige bijdragers:", + "translateButton": "Vertaal KristWeb", + "tmpim": "Gemaakt door tmpim", + + "versionInfo": { + "version": "Versie", + "commitHash": "Commit", + "buildTime": "Buildtijd" + } + }, + + "settings": { + "siteTitle": "Instellingen", + "title": "Instellingen", + + "messageSuccess": "Instelling succesvol gewijzigd!", + + "settingIntegerSave": "Opslaan", + + "menuLanguage": "Taal", + + "subMenuAutoRefresh": "Automatisch-verversen", + "autoRefreshTables": "Automatisch-verversen tabellen", + "autoRefreshTablesDescription": "Of grote tafellijsten (bijv. Transacties, namen) al dan niet automatisch moeten worden vernieuwd wanneer er een wijziging op het netwerk wordt gedetecteerd.", + + "subMenuAdvanced": "Geavanceerde instellingen", + "alwaysIncludeMined": "Neem altijd gemijnde transacties op in transactielijsten (mogelijk moet er worden vernieuwd)", + "copyNameSuffixes": "Voeg het achtervoegsel toe bij het kopiëren van namen", + "addressCopyButtons": "Toon kopieerknoppen naast alle adressen", + "nameCopyButtons": "Toon kopieerknoppen naast alle namen", + "blockHashCopyButtons": "Toon kopieerknoppen naast alle blok-hashes", + "showRelativeDates": "Geef relatieve datums weer in plaats van absolute, indien recent", + "showRelativeDatesDescription": "Overal op de site, als een datum minder dan 7 dagen geleden is, wordt deze als een relatieve datum weergegeven.", + "transactionDefaultRaw": "Standaard het tabblad 'Rauw' weergeven in plaats van 'CommonMeta' op de transactiepagina", + "defaultPageSize": "Standaard paginaformaat voor tabelvermeldingen", + + "subMenuDebug": "Debug instellingen", + "advancedWalletFormats": "Geavanceerde wallet formaten", + "menuTranslations": "Vertalingen", + + "subTitleTranslations": "Vertalingen", + + "translations": { + "errorMissingLanguages": "Het bestand languages.json lijkt te ontbreken. Is KristWeb correct gecompileerd?", + "errorNoKeys": "Geen vertalingssleutels", + + "columnLanguageCode": "Code", + "columnLanguage": "Taal", + "columnKeys": "Sleutels", + "columnMissingKeys": "Missende sleutels", + "columnProgress": "Voortgang", + + "tableUntranslatedKeys": "Onvertaalde sleutels", + "columnKey": "Sleutel", + "columnEnglishString": "Engelse tekst", + + "importJSON": "Importeer JSON", + "exportCSV": "Exporteer CSV" + } + }, + + "breadcrumb": { + "dashboard": "Dashboard", + "wallets": "Wallets", + + "settings": "Instellingen", + "settingsDebug": "Debug", + "settingsTranslations": "Vertalingen" + }, + + "ws": { + "errorToken": "Er is een fout opgetreden bij het verbinden met de Krist websocket-server.", + "errorWS": "Er is een fout opgetreden bij het verbinden met de Krist websocket-server (code <1>{{code}})." + }, + + "rateLimitTitle": "Verzoek-limiet bereikt", + "rateLimitDescription": "Er zijn in korte tijd te veel verzoeken naar de Krist-server gestuurd. Dit wordt waarschijnlijk veroorzaakt door een bug!", + + "address": { + "title": "Adres", + + "walletLabel": "Label:", + "walletCategory": "Categorie:", + + "balance": "Huidige balans", + "names": "Namen", + "nameCount": "{{count, number}} naam", + "nameCount_plural": "{{count, number}} namen", + "firstSeen": "Geïntroduceert", + + "buttonSendKrist": "Verzend Krist naar {{address}}", + "buttonTransferKrist": "Maak Krist over naar {{address}}", + "buttonAddFriend": "Toevoegen aan adresboek", + "buttonEditFriend": "Bewerken in adresboek", + "buttonEditWallet": "Wallet bewerken", + + "cardRecentTransactionsTitle": "Recente transacties", + "cardNamesTitle": "Namen", + + "transactionsError": "Er is een fout opgetreden bij het ophalen van de transacties. Zie de console voor details.", + "namesError": "Er is een fout opgetreden bij het ophalen van de namen. Zie de console voor details.", + + "namePurchased": "Aangeschaft <1 />", + "nameReceived": "Ontvangen <1 />", + "namesSeeMore": "Zie alle {{count, number}}...", + + "resultInvalidTitle": "Foutief adres", + "resultInvalid": "Dat lijkt niet op een correct krist adres.", + "resultNotFoundTitle": "Adres niet gevonden", + "resultNotFound": "Dat adres is nog niet geinitialiseerd op het Krist netwerk" + }, + + "transactionSummary": { + "itemID": "Transactie ID: {{id}}", + "itemFrom": "<0>Van: <1 />", + "itemTo": "<0>Naar: <1 />", + "itemName": "<0>Naam: <1 />", + "itemARecord": "<0>A record: <1 />", + "itemARecordRemoved": "(verwijderd)", + "seeMore": "Zie alle {{count, number}}..." + }, + + "transactions": { + "title": "Netwerktransacties", + "myTransactionsTitle": "Mijn transacties", + "nameHistoryTitle": "Naamgeschiedenis", + "nameTransactionsTitle": "Naamtransacties", + "searchTitle": "Transacties doorzoeken", + + "siteTitleWallets": "Mijn transacties", + "siteTitleNetworkAll": "Netwerktransacties", + "siteTitleNetworkAddress": "{{address}}'s transacties", + "siteTitleNameHistory": "Naamgeschiedenis", + "siteTitleNameSent": "Naamtransacties", + "siteTitleSearch": "Transacties doorzoeken", + + "subTitleSearchAddress": "Betreffende {{address}}", + "subTitleSearchName": "Betreffende {{name}}", + "subTitleSearchMetadata": "Met metagegevens '{{query}}'", + + "columnID": "ID", + "columnType": "Type", + "columnFrom": "Van", + "columnTo": "Naar", + "columnValue": "Waarde", + "columnName": "Naam", + "columnMetadata": "Metagegevens", + "columnTime": "Tijd", + + "tableTotal": "{{count, number}} resultaat", + "tableTotal_plural": "{{count, number}} resultaten", + + "includeMined": "Inclusief gemijnde transacties", + + "resultInvalidTitle": "Foutief adres", + "resultInvalid": "Dat lijkt niet op een correct krist adres.", + + "types": { + "transferred": "Overgedragen", + "sent": "Verzonden", + "received": "Ontvangen", + "mined": "Gemijnd", + "name_a_record": "Naam gewijzigd", + "name_transferred": "Naam overgedragen", + "name_sent": "Naam verzonden", + "name_received": "Naam ontvangen", + "name_purchased": "Naam aangeschaft", + "bumped": "Bumped", + "unknown": "Onbekend" + } + }, + + "names": { + "titleWallets": "Mijn namen", + "titleNetworkAll": "Netwerknamen", + "titleNetworkAddress": "Netwerknamen", + + "siteTitleWallets": "Mijn namen", + "siteTitleNetworkAll": "Netwerknamen", + "siteTitleNetworkAddress": "{{address}}'s namen", + + "columnName": "Naam", + "columnOwner": "Eigenaar", + "columnOriginalOwner": "Originele igenaar", + "columnRegistered": "Geregistreerd", + "columnUpdated": "Bijgewerkt", + "columnARecord": "A Record", + "columnUnpaid": "Onbetaalde blokken", + + "tableTotal": "{{count, number}} naam", + "tableTotal_plural": "{{count, number}} namen", + + "resultInvalidTitle": "Foutief adres", + "resultInvalid": "Dat lijkt niet op een correct krist adres." + }, + + "name": { + "title": "Naam", + + "buttonSendKrist": "Verzend Krist naar {{name}}", + "buttonTransferKrist": "Maak Krist over naar {{name}}", + "buttonARecord": "Werk A record bij", + "buttonTransferName": "Naam overmaken", + + "owner": "Eigendom van", + "originalOwner": "Gekocht door", + "registered": "Geregistreerd", + "updated": "Laatst bijgewerkt", + "unpaid": "Onbetaalde blokken", + "unpaidCount": "{{count, number}} blok", + "unpaidCount_plural": "{{count, number}} blokken", + "aRecord": "A record", + "aRecordEditTooltip": "A record bijwerken", + + "cardRecentTransactionsTitle": "Recente transacties", + "cardHistoryTitle": "Naamgeschiedenis", + "transactionsError": "Er is een fout opgetreden bij het ophalen van transacties. Zie de console voor details.", + "historyError": "Er is een fout opgetreden bij het ophalen van de naamgeschiedenis. Zie de console voor details.", + + "resultInvalidTitle": "Foutieve naam", + "resultInvalid": "Dit lijkt niet op een correct krist adres.", + "resultNotFoundTitle": "Naam niet gevonden", + "resultNotFound": "Die naam bestaat niet." + }, + + "blocks": { + "title": "Netwerkblokken", + "titleLowest": "Laagste blokken", + "siteTitle": "Netwerkblokken", + "siteTitleLowest": "Laagste blokken", + + "columnHeight": "Hoogte", + "columnAddress": "Mijner", + "columnHash": "Blok hash", + "columnValue": "Waarde", + "columnDifficulty": "Moeilijkheidsgraad", + "columnTime": "Tijd", + + "tableTotal": "{{count, number}} blok", + "tableTotal_plural": "{{count, number}} blokken" + }, + + "block": { + "title": "Blok", + "siteTitle": "Blok", + "siteTitleBlock": "Blok #{{id, number}}", + "subTitleBlock": "#{{id, number}}", + + "height": "Hoogte", + "miner": "Mijner", + "value": "Waarde", + "time": "Tijd", + "hash": "Hash", + "difficulty": "Moeilijkheidsgraad", + + "previous": "Vorige", + "previousTooltip": "Vorige blok (#{{id, number}})", + "previousTooltipNone": "Vorige blok ", + "next": "Volgende", + "nextTooltip": "Volgend blok (#{{id, number}})", + "nextTooltipNone": "Volgend blok", + + "resultInvalidTitle": "Foutieve blokhoogte", + "resultInvalid": "Dit lijkt niet op een correcte blokhoogte.", + "resultNotFoundTitle": "Blok niet gevonden", + "resultNotFound": "Dit blok is niet gevonden." + }, + + "transaction": { + "title": "Transactie", + "siteTitle": "Transactie", + "siteTitleTransaction": "Transactie #{{id, number}}", + "subTitleTransaction": "#{{id, number}}", + + "type": "Type", + "from": "Van", + "to": "Naar", + "address": "Adres", + "name": "Naam", + "value": "Waarde", + "time": "Tijd", + "aRecord": "A record", + + "cardMetadataTitle": "Metagegevens", + "tabCommonMeta": "CommonMeta", + "tabRaw": "Raw", + + "commonMetaError": "CommonMeta parseren heeft gefaald.", + "commonMetaParsed": "Geparseerde gegevens", + "commonMetaParsedHelp": "Deze waarden waren niet rechtstreeks opgenomen in de metagegevens van de transactie, maar werden afgeleid door de CommonMeta-parser.", + "commonMetaCustom": "Transactiegegevens", + "commonMetaCustomHelp": "Deze waarden waren direct opgenomen in de metagegevens van de transactie.", + "commonMetaColumnKey": "Sleutel", + "commonMetaColumnValue": "Waarde", + + "cardRawDataTitle": "Rauwe gegevens", + "cardRawDataHelp": "De transactie zoals deze is geretourneerd door de Krist API.", + + "rawDataColumnKey": "Sleutel", + "rawDataColumnValue": "Waarde", + + "resultInvalidTitle": "Foutieve transactie ID", + "resultInvalid": "Dat lijkt niet op een geldige transactie-ID.", + "resultNotFoundTitle": "Transactie niet gevonden", + "resultNotFound": "Die transactie bestaat niet." + }, + + "apiErrorResult": { + "resultUnknownTitle": "Onbekende fout", + "resultUnknown": "Zie de console voor details." + }, + + "noWalletsResult": { + "title": "Nog geen wallets", + "subTitle": "Je hebt momenteel geen wallets opgeslagen in KristWeb, dus er is hier nog niets te zien. Wilt u een portemonnee toevoegen?", + "button": "Wallets toevoegen", + "buttonNetworkTransactions": "Netwerktransacties", + "buttonNetworkNames": "Netwerknamen" + }, + + "backups": { + "importButton": "Importeer back-up", + "exportButton": "Exporteer back-up" + }, + + "import": { + "description": "Plak de back-upcode (of importeer uit een bestand hieronder) en voer het bijbehorende hoofdwachtwoord in. Back-ups van KristWeb v1 worden ook ondersteund.", + + "masterPasswordPlaceholder": "Hoofdwachtwoord", + "masterPasswordRequired": "Hoofdwachtwoord is vereist.", + "masterPasswordIncorrect": "Hoofdwachtwoord is incorrect.", + + "appMasterPasswordRequired": "U moet geauthenticeerd zijn om wallets te importeren.", + + "fromFileButton": "Importeer uit bestand", + "textareaPlaceholder": "Plak back-up code hier.", + "textareaRequired": "Back-up code is vereist.", + "fileErrorTitle": "Importeerfout", + "fileErrorNotText": "Het geïmporteerde bestand moet een tekstbestand zijn.", + + "overwriteCheckboxLabel": "Werk bestaande wallet-labels bij als er conflicten zijn", + + "modalTitle": "Importeer back-up", + "modalButton": "Importeren", + + "detectedFormat": "<0>Gedetecteerd format: <2 />", + "detectedFormatKristWebV1": "KristWeb v1", + "detectedFormatKristWebV2": "KristWeb v2", + "detectedFormatInvalid": "Foutief!", + + "decodeErrors": { + "atob": "De back-up kon niet worden gedecodeerd omdat het geen geldige base64 is!", + "json": "De back-up kon niet worden gedecodeerd omdat het geen geldige JSON is!", + "missingTester": "De back-up kon niet worden gedecodeerd omdat er een testsleutel ontbreekt!", + "missingSalt": "De back-up kon niet worden gedecodeerd omdat er een salt key ontbreekt!", + "invalidTester": "De back-up kon niet worden gedecodeerd omdat de 'tester'-sleutel van het verkeerde type is!", + "invalidSalt": "De back-up kon niet worden gedecodeerd omdat de 'salt'-sleutel van het verkeerde type is!", + "invalidWallets": "De back-up kon niet worden gedecodeerd omdat de 'wallets'-sleutel van het verkeerde type is!", + "invalidFriends": "De back-up kon niet worden gedecodeerd omdat de adresboek-sleutel van het verkeerde type is!", + "unknown": "De back-up kon niet worden gedecodeerd vanwege een onbekende fout. Zie console voor details." + }, + + "walletMessages": { + "success": "Wallet succesvol geïmporteerd.", + "successSkipped": "Er bestaat al een wallet met hetzelfde adres ({{address}}) en instellingen, dus deze is overgeslagen.", + "successUpdated": "Er bestaat al een wallet met hetzelfde adres ({{address}}). Het label is geüpdatet naar \"{{label}}\"", + "successSkippedNoOverwrite": "Er bestaat al een wallet met hetzelfde adres ({{address}}) en u heeft ervoor gekozen het label niet te overschrijven, dus het is overgeslagen.", + "successImportSkipped": "Er is al een wallet met hetzelfde adres ({{address}}) geïmporteerd, dus deze is overgeslagen.", + + "warningSyncNode": "Deze wallet had een aangepast synchronisatieknooppunt, dat niet wordt ondersteund in KristWeb v2. Het synchronisatieknooppunt is overgeslagen.", + "warningIcon": "Deze wallet had een aangepast pictogram, dat niet wordt ondersteund in KristWeb v2. Het pictogram is overgeslagen.", + "warningLabelInvalid": "Het label voor deze wallet is ongeldig. Het label is overgeslagen.", + "warningCategoryInvalid": "De categorie voor deze wallet is ongeldig. De categorie is overgeslagen.", + "warningAdvancedFormat": "Deze wallet gebruikt een geavanceerd formaat ({{format}}), dat beperkte ondersteuning heeft in KristWeb v2.", + + "errorInvalidTypeString": "Deze wallet was geen string!", + "errorInvalidTypeObject": "Deze wallet was geen object!", + "errorDecrypt": "Deze wallet kon niet worden gedecodeerd!", + "errorPasswordDecrypt": "Het wachtwoord voor deze wallet kan niet worden gedecodeerd!", + "errorWalletJSON": "De ontsleutelde gegevens waren geen geldige JSON!", + "errorUnknownFormat": "Deze wallet gebruikt een onbekend of niet-ondersteund formaat!", + "errorFormatMissing": "Deze wallet mist een formaat!", + "errorUsernameMissing": "Deze wallet mist een gebruikersnaam!", + "errorPasswordMissing": "Deze wallet mist een wachtwoord!", + "errorPrivateKeyMissing": "Deze wallet mist een privésleutel!", + "errorMasterKeyMissing": "Deze wallet mist een hoofdsleutel!", + "errorPrivateKeyMismatch": "Het wachtwoord van deze wallet matcht niet met de opgeslagen privésleutel!", + "errorMasterKeyMismatch": "Het wachtwoord van deze wallet matcht niet met de opgeslagen hoofdsleutel!", + "errorLimitReached": "U heeft de wallet-limiet bereikt. U kunt momenteel geen wallets meer toevoegen.", + "errorUnknown": "Er heeft een onbekende fout opgetreden. Zie de console voor details." + }, + + "friendMessages": { + "errorNYI": "Het adresboek is nog niet geïmplementeerd, dus het is overgeslagen." + }, + + "results": { + "noneImported": "Er zijn geen nieuwe wallets geïmporteerd.", + + "walletsImported": "<0>{{count, number}} nieuwe wallet was geïmporteerd.", + "walletsImported_plural": "<0>{{count, number}} nieuwe wallets waren geïmporteerd.", + "walletsSkipped": "{{count, number}} wallet was overgeslagen.", + "walletsSkipped_plural": "{{count, number}} wallets waren overgeslagen.", + + "friendsImported": "<0>{{count, number}} nieuwe vriend was geïmporteerd.", + "friendsImported_plural": "<0>{{count, number}} nieuwe vrienden waren geïmporteerd.", + "friendsSkipped": "{{count, number}} vriend was overgeslagen.", + "friendsSkipped_plural": "{{count, number}} vrienden waren overgeslagen.", + + "warnings": "Er is <1>{{count, number}} waarschuwing opgetreden tijdens het importeren.", + "warnings_plural": "Er zijn <1>{{count, number}} waarschuwingen opgetreden tijdens het importeren.", + "errors": "Er is <1>{{count, number}} fout opgetreden tijdens het importeren.", + "errors_plural": "Er zijn <1>{{count, number}} fouten opgetreden tijdens het importeren.", + "errorsAndWarnings": "Er zijn <1>{{errors, number}} fout(en) en <3>{{warnings, number}} waarschuwing(en) opgetreden tijdens het importeren.", + + "treeHeaderWallets": "Wallets", + "treeHeaderFriends": "Vrienden (Adresboek)", + + "treeWallet": "Wallet {{id}}", + "treeFriend": "Vriend {{id}}" + } + }, + + "walletLimitMessage": "Je hebt meer wallets opgeslagen dan KristWeb ondersteunt. Dit werd veroorzaakt door een bug, of u hebt deze opzettelijk omzeild. Verwacht problemen met synchroniseren.", + + "optionalFieldUnset": "(geen waarde)", + + "addressPicker": { + "placeholder": "Kies een ontvanger", + "placeholderWalletsOnly": "Kies een wallet", + + "hintCurrentBalance": "Huidige balans: <1 />", + + "errorInvalidAddress": "Ongeldig adres of naam.", + "errorInvalidRecipient": "Ongeldige ontvanger. Moet een adres of naam zijn.", + "errorInvalidWalletsOnly": "Ongeldig walletadres.", + + "categoryWallets": "Wallets", + "categoryOtherWallets": "Andere wallets", + "categoryAddressBook": "Adresboek", + "categoryExactAddress": "Exact adres" + } +} diff --git a/public/locales/pl.json b/public/locales/pl.json new file mode 100644 index 0000000..71fa7db --- /dev/null +++ b/public/locales/pl.json @@ -0,0 +1,859 @@ +{ + "app": { + "name": "KristWeb" + }, + + "nav": { + "connection": { + "online": "Połączony", + "offline": "Rozłączony", + "connecting": "Nawiązywanie połączenia" + }, + + "search": { + "placeholder": "Przeszukaj sieć Krist", + "placeholderShortcut": "Przeszukaj sieć Krist ({{shortcut}})", + "rateLimitHit": "Proszę zwolnij.", + "noResults": "Brak wyników.", + + "resultAddress": "Adres", + "resultName": "Nazwa", + "resultNameOwner": "Posiadany przez <1 />", + "resultBlockID": "ID bloku", + "resultBlockIDMinedBy": "Wydobyty przez <1 />", + "resultTransactionID": "ID transakcji", + "resultTransactions": "Transakcje", + "resultTransactionsAddress": "Wyszukaj transakcje z udziałem <1 />", + "resultTransactionsAddressResult_0": "<0>{{count, number}} transakcja z udziałem <2 />", + "resultTransactionsAddressResult_1": "<0>{{count, number}} transakcje z udziałem <2 />", + "resultTransactionsAddressResult_2": "<0>{{count, number}} transakcji z udziałem <2 />", + "resultTransactionsAddressResultEmpty": "Brak transakcji z udziałem <1 />", + "resultTransactionsName": "Wyszukaj transakcje z udziałem <1 />", + "resultTransactionsNameResult_0": "<0>{{count, number}} transakcja wysłana do <2 />", + "resultTransactionsNameResult_1": "<0>{{count, number}} transakcje wysłano do <2 />", + "resultTransactionsNameResult_2": "<0>{{count, number}} transakcji wysłanych do <2 />", + "resultTransactionsNameResultEmpty": "Brak transakcji wysłanych do <1 />", + "resultTransactionsMetadata": "Wyszukiwanie metadanych zawierających <1 />", + "resultTransactionsMetadataResult_0": "<0>{{count, number}} transakcja zawierająca metadane <2 />", + "resultTransactionsMetadataResult_1": "<0>{{count, number}} transakcje zawierające metadane <2 />", + "resultTransactionsMetadataResult_2": "<0>{{count, number}} transakcji zawierających metadane <2 />", + "resultTransactionsMetadataResultEmpty": "Brak transakcji zawierających metadane <1 />" + }, + + "send": "Wyślij", + "request": "Zażądaj", + + "settings": "Ustawienia" + }, + + "sidebar": { + "totalBalance": "Saldo całkowite", + "dashboard": "Pulpit nawigacyjny", + "myWallets": "Moje portfele", + "addressBook": "Książka adresowa", + "transactions": "Transakcje", + "names": "Nazwy", + "mining": "Wydobywanie", + "network": "Sieć", + "blocks": "Bloki", + "statistics": "Statystyka", + "madeBy": "Stworzone przez <1>{{authorName}}", + "hostedBy": "Hostowany przez <1>{{host}}", + "github": "GitHub", + "credits": "Uznania", + + "updateTitle": "Dostępna aktualizacja!", + "updateDescription": "Dostępna jest nowa wersja KristWeb. Proszę odświeżyć stronę.", + "updateReload": "Odśwież" + }, + + "dialog": { + "close": "Zamknij", + "yes": "Tak", + "no": "Nie", + "ok": "OK", + "cancel": "Anuluj" + }, + + "pagination": { + "justPage": "Strona {{page}}", + "pageWithTotal": "Strona {{page}} z {{total}}" + }, + + "error": "Błąd", + "loading": "Ładowanie...", + + "copy": "Skopiuj do schowka", + "copied": "Skopiowano!", + + "pageNotFound": { + "resultTitle": "Strona nie znaleziona", + "buttonGoBack": "Wstecz" + }, + + "contextualAddressUnknown": "Nieznany", + "contextualAddressNonExistentTooltip": "Ten adres nie został jeszcze zainicjowany w sieci Krist.", + + "typeahead": { + "emptyLabel": "Nie znaleziono dopasowań.", + "paginationText": "Wyświetl dodatkowe wyniki ..." + }, + + "masterPassword": { + "dialogTitle": "Hasło główne", + "passwordPlaceholder": "Hasło główne", + "passwordConfirmPlaceholder": "Potwierdź hasło główne", + "createPassword": "Stwórz hasło", + "logIn": "Zaloguj sie", + "forgotPassword": "Zapomniałeś hasła?", + "intro2": "Wprowadź <1>hasło główne, aby zaszyfrować klucze prywatne portfela. Zostaną one zapisane w lokalnej pamięci przeglądarki i zostaniesz poproszony o podanie hasła głównego, aby je odszyfrować raz na sesję.", + "learnMore": "dowiedz się więcej", + "errorPasswordRequired": "Wymagane jest hasło.", + "errorPasswordLength": "Musi mieć co najmniej 1 znak.", + "errorPasswordUnset": "Hasło główne nie zostało skonfigurowane.", + "errorPasswordIncorrect": "Niepoprawne hasło.", + "errorPasswordInequal": "Hasła muszą się zgadzać.", + "errorStorageCorrupt": "Pamięć portfela jest uszkodzona.", + "errorNoPassword": "Wymagane jest hasło główne.", + "errorUnknown": "Nieznany błąd.", + "helpWalletStorageTitle": "Pomoc: Pamięć portfela", + "popoverTitle": "Odszyfruj portfele", + "popoverTitleEncrypt": "Zaszyfruj portfele", + "popoverAuthoriseButton": "Autoryzuj", + "popoverDescription": "Wprowadź swoje hasło główne, aby odszyfrować swoje portfele.", + "popoverDescriptionEncrypt": "Wprowadź swoje hasło główne, aby zaszyfrować i odszyfrować swoje portfele.", + "forcedAuthWarning": "Zostałeś automatycznie zalogowany przez niebezpieczne ustawienie debugowania." + }, + + "myWallets": { + "title": "Portfele", + "manageBackups": "Zarządzaj kopiami zapasowymi", + "createWallet": "Utwórz portfel", + "addExistingWallet": "Dodaj istniejący portfel", + "searchPlaceholder": "Przeszukaj portfele ...", + "categoryDropdownAll": "Wszystkie kategorie", + "columnLabel": "Etykieta", + "columnAddress": "Adres", + "columnBalance": "Saldo", + "columnNames": "Nazwy", + "columnCategory": "Kategoria", + "columnFirstSeen": "Pierwszy raz widziany", + "nameCount_0": "{{count, number}} nazwa", + "nameCount_1": "{{count, number}} nazwy", + "nameCount_2": "{{count, number}} nazw", + "nameCountEmpty": "Brak nazw", + "firstSeen": "Pierwszy raz widziany {{date}}", + + "walletCount_0": "{{count, number}} portfel", + "walletCount_1": "{{count, number}} portfele", + "walletCount_2": "{{count, number}} portfeli", + "walletCountEmpty": "Brak portfeli", + + "actionsEditTooltip": "Edytuj portfel", + "actionsSendTransaction": "Wyślij Krist", + "actionsWalletInfo": "Informacje o portfelu", + "actionsDelete": "Usuń portfel", + "actionsDeleteConfirm": "Czy na pewno chcesz usunąć ten portfel?", + "actionsDeleteConfirmDescription": "Jeśli nie wykonałeś kopii zapasowej lub nie zapisałeś hasła, zostanie ono utracone na zawsze!", + + "tagDontSave": "Tymczasowy", + "tagDontSaveTooltip": "Tymczasowy portfel", + + "info": { + "title": "Informacje o portfelu - {{address}}", + + "titleBasicInfo": "Podstawowe informacje", + "id": "ID", + "label": "Etykieta", + "category": "Kategoria", + "username": "Nazwa Użytkownika", + "password": "Hasło", + "privatekey": "Prywatny klucz", + "format": "Format", + + "titleSyncedInfo": "Informacje zsynchronizowane", + "address": "Adres", + "balance": "Saldo", + "names": "Liczba nazw", + "firstSeen": "Pierwszy raz widziany", + "existsOnNetwork": "Istnieje w sieci", + "lastSynced": "Ostatnia synchronizacja", + + "titleAdvancedInfo": "Informacje zaawansowane", + "encPassword": "Zaszyfrowane hasło", + "encPrivatekey": "Zaszyfrowany klucz prywatny", + "saved": "zapisane", + + "revealLink": "Pokaż", + "hideLink": "Schowaj", + + "true": "Tak", + "false": "Nie" + } + }, + + "myTransactions": { + "title": "Transakcje", + "searchPlaceholder": "Wyszukaj transakcje...", + "columnFrom": "Od", + "columnTo": "Do", + "columnValue": "Wartość", + "columnTime": "Czas" + }, + + "status": "KristWeb 2 jest nadal w fazie rozwoju. Jeśli nie jesteś donorem, nie powinno Cię tu być. Nie hostuj tej witryny. ", + + "addWallet": { + "dialogTitle": "Dodaj portfel", + "dialogTitleCreate": "Utwórz portfel", + "dialogTitleEdit": "Edytuj portfel", + "dialogOkAdd": "Dodaj", + "dialogOkCreate": "Utwórz", + "dialogOkEdit": "Zapisz", + "dialogAddExisting": "Dodaj istniejący portfel", + + "walletLabel": "Etykieta portfela", + "walletLabelPlaceholder": "Etykieta portfela (opcjonalna)", + "walletLabelMaxLengthError": "Nie więcej niż 32 znaki", + "walletLabelWhitespaceError": "Nie mogą to być tylko spacje", + + "walletCategory": "Kategoria portfela", + "walletCategoryDropdownNone": "Brak kategorii", + "walletCategoryDropdownNew": "Nowa", + "walletCategoryDropdownNewPlaceholder": "Nazwa kategorii", + + "walletAddress": "Adres portfela", + "walletUsername": "Nazwa użytkownika portfela", + "walletUsernamePlaceholder": "Nazwa użytkownika portfela", + "walletPassword": "Hasło do portfela", + "walletPasswordPlaceholder": "Hasło do portfela", + "walletPasswordWarning": "Upewnij się, że zapisałeś to w <1>bezpiecznym miejscu!", + "walletPasswordRegenerate": "Wygeneruj nowy", + "walletPrivatekey": "Klucz prywatny portfela", + "walletPrivatekeyPlaceholder": "Klucz prywatny portfela", + + "advancedOptions": "Zaawansowane opcje", + + "walletFormat": "Format portfela", + "walletFormatKristWallet": "KristWallet, KWallet (zalecany)", + "walletFormatKristWalletUsernameAppendhashes": "KW-Username (appendhashes)", + "walletFormatKristWalletUsername": "KW-Username (pre-appendhashes)", + "walletFormatJwalelset": "jwalelset", + "walletFormatApi": "Raw/API (advanced users)", + + "walletSave": "Zapisz ten portfel w KristWeb", + + "messageSuccessAdd": "Pomyślnie dodano portfel!", + "messageSuccessCreate": "Pomyślnie utworzono portfel!", + "messageSuccessEdit": "Pomyślnie zapisano portfel!", + + "errorPasswordRequired": "Wymagane jest hasło.", + "errorPrivatekeyRequired": "Wymagany jest klucz prywatny.", + "errorUnexpectedTitle": "Niespodziewany błąd", + "errorUnexpectedDescription": "Wystąpił błąd podczas dodawania portfela. Szczegółowe informacje można znaleźć w konsoli.", + "errorUnexpectedEditDescription": "Wystąpił błąd podczas edycji portfela. Szczegółowe informacje można znaleźć w konsoli.", + "errorDuplicateWalletTitle": "Portfel już istnieje", + "errorDuplicateWalletDescription": "Masz już portfel dla tego adresu.", + "errorMissingWalletTitle": "Nie znaleziono portfela", + "errorMissingWalletDescription": "Portfel, który próbujesz edytować, już nie istnieje.", + "errorDecryptTitle": "Nieprawidłowe hasło główne", + "errorDecryptDescription": "Nie udało się odszyfrować hasła do portfela. Czy hasło główne jest prawidłowe?", + "errorWalletLimitTitle": "Osiągnięto limit portfeli", + "errorWalletLimitDescription": "Obecnie nie możesz dodać więcej portfeli." + }, + + "dashboard": { + "siteTitle": "Pulpit nawigacyjny", + + "inDevBanner": "Witamy w prywatnej wersji beta KristWeb v2! Ta strona jest wciąż w fazie rozwoju, więc obecnie brakuje większości funkcji. Prosimy o zgłaszanie wszystkich błędów na <1> GitHub . Dzięki!", + + "walletOverviewCardTitle": "Portfele", + "walletOverviewTotalBalance": "Saldo całkowite", + "walletOverviewNames": "Nazwy", + "walletOverviewNamesCount_0": "{{count, number}} nazwa", + "walletOverviewNamesCount_1": "{{count, number}} nazwy", + "walletOverviewNamesCount_2": "{{count, number}} nazw", + "walletOverviewNamesCountEmpty": "Brak nazw", + "walletOverviewSeeMore": "Zobacz wszystkie {{count, number}}...", + "walletOverviewAddWallets": "Dodaj portfele...", + + "transactionsCardTitle": "Transakcje", + "transactionsError": "Wystąpił błąd podczas pobierania transakcji. Zobacz konsolę, aby uzyskać szczegółowe informacje.", + + "blockValueCardTitle": "Wartość bloku", + "blockValueBaseValue": "Wartość bloku (<1>)", + "blockValueBaseValueNames_0": "{{count, number}} nazwa", + "blockValueBaseValueNames_1": "{{count, number}} nazwy", + "blockValueBaseValueNames_2": "{{count, number}} nazw", + "blockValueNextDecrease_0": "Zmniejsza o <1> w <3>{{count, number}} blok", + "blockValueNextDecrease_1": "Zmniejsza o <1> w <3>{{count, number}} bloki", + "blockValueNextDecrease_2": "Zmniejsza o <1> w <3>{{count, number}} bloków", + "blockValueReset_0": "Resetuje się za <1>{{count, number}} blok", + "blockValueReset_1": "Resetuje się za <1>{{count, number}} bloki", + "blockValueReset_2": "Resetuje się za <1>{{count, number}} bloków", + "blockValueEmptyDescription": "Wartość bloku wzrasta, gdy kupowane są <1>nazwy.", + + "blockDifficultyCardTitle": "Trudność bloku", + "blockDifficultyError": "Wystąpił błąd podczas pobierania trudności bloku. Zobacz konsolę, aby uzyskać szczegółowe informacje.", + "blockDifficultyHashRate": "Około <1 />", + "blockDifficultyHashRateTooltip": "Szacowana łączna szybkość wydobycia w sieci, na podstawie bieżącej pracy.", + "blockDifficultyChartWork": "Trudność bloku", + "blockDifficultyChartLinear": "Liniowy", + "blockDifficultyChartLog": "Logarytmiczny", + + "motdCardTitle": "MOTD serwera", + "motdDebugMode": "Ten węzeł synchronizacji jest nieoficjalnym serwerem developerskim. Można manipulować saldami i transakcjami. Postępuj ostrożnie.", + + "whatsNewCardTitle": "Nowości" + }, + + "credits": { + "title": "Uznania", + "madeBy": "Stworzone przez <1>{{authorName}}", + "hostedBy": "Hostowany przez <1>{{host}}", + "supportersTitle": "Darczyńcy", + "supportersDescription": "Ten projekt był możliwy dzięki następującym niesamowitym darczyńcom:", + "supportButton": "Wesprzyj KristWeb", + "translatorsTitle": "Tłumacze", + "translatorsDescription": "Ten projekt został przetłumaczony przez następujących niesamowitych współpracowników:", + "translateButton": "Przetłumacz KristWeb", + "tmpim": "Stworzony przez tmpim", + + "versionInfo": { + "version": "Wersja", + "commitHash": "Commit", + "buildTime": "Czas budowy" + } + }, + + "settings": { + "siteTitle": "Ustawienia", + "title": "Ustawienia", + + "messageSuccess": "Ustawienie zostało pomyślnie zmienione!", + + "settingIntegerSave": "Zapisz", + + "menuLanguage": "Język", + + "subMenuAutoRefresh": "Automatyczne odświeżanie", + "autoRefreshTables": "Automatyczne odświeżanie tabel", + "autoRefreshTablesDescription": "Określa, czy listy w dużych tabelach (np. Transakcje, nazwy) powinny być automatycznie odświeżane po wykryciu zmiany w sieci.", + "autoRefreshAddressPage": "Automatyczne odświeżanie strony z adresami", + "autoRefreshNamePage": "Automatyczne odświeżanie strony z nazwami", + + "subMenuAdvanced": "Zaawansowane ustawienia", + "alwaysIncludeMined": "Zawsze uwzględniaj transakcje wydobycia na listach transakcji (może wymagać odświeżenia)", + "copyNameSuffixes": "Uwzględnij przyrostek przy kopiowaniu nazw", + "addressCopyButtons": "Pokaż przyciski kopiowania obok wszystkich adresów", + "nameCopyButtons": "Pokaż przyciski kopiowania obok wszystkich nazw", + "blockHashCopyButtons": "Pokaż przyciski kopiowania obok wszystkich skrótów bloków", + "showRelativeDates": "Pokaż daty względne zamiast bezwzględnych, jeśli są niedawne", + "showRelativeDatesDescription": "Wszędzie w witrynie, jeśli data jest wcześniejsza niż 7 dni, zostanie wyświetlona jako data względna.", + "transactionDefaultRaw": "Domyślnie wybierz zakładkę 'Nieprzetworzone' zamiast 'CommonMeta' na stronie transakcji", + "defaultPageSize": "Domyślny rozmiar strony dla tabel", + + "subMenuDebug": "Ustawienia debugowania", + "advancedWalletFormats": "Zaawansowane formaty portfeli", + "menuTranslations": "Tłumaczenia", + + "subTitleTranslations": "Tłumaczenia", + + "translations": { + "errorMissingLanguages": "Wydaje się, że brakuje pliku languages.json. Czy KristWeb został poprawnie skompilowany?", + "errorNoKeys": "Brak kluczy tłumaczenia", + + "columnLanguageCode": "Kod", + "columnLanguage": "Język", + "columnKeys": "Klucze", + "columnMissingKeys": "Brakujące klucze", + "columnProgress": "Postęp", + + "tableUntranslatedKeys": "Nieprzetłumaczone klucze", + "columnKey": "Klucz", + "columnEnglishString": "Angielska wersja", + + "importJSON": "Importuj JSON", + "exportCSV": "Eksportuj CSV", + + "importedLanguageTitle": "Zaimportowany Język" + } + }, + + "breadcrumb": { + "dashboard": "Pulpit nawigacyjny", + "wallets": "Portfele", + + "settings": "Ustawienia", + "settingsDebug": "Debug", + "settingsTranslations": "Tłumaczenia" + }, + + "ws": { + "errorToken": "Wystąpił błąd podczas łączenia się z serwerem websocket Krist.", + "errorWS": "Wystąpił błąd podczas łączenia się z serwerem websocket Krist (code <1>{{code}})." + }, + + "rateLimitTitle": "Osiągnięto limit częstotliwości", + "rateLimitDescription": "Zbyt wiele żądań zostało wysłanych do serwera Krist w krótkim czasie. Jest to prawdopodobnie spowodowane błędem!", + + "address": { + "title": "Adres", + + "walletLabel": "Etykieta:", + "walletCategory": "Kategoria:", + + "balance": "Aktualne saldo", + "names": "Nazwy", + "nameCount_0": "{{count, number}} nazwa", + "nameCount_1": "{{count, number}} nazwy", + "nameCount_2": "{{count, number}} nazw", + "nameCountEmpty": "Brak nazw", + "firstSeen": "Pierwszy raz widziany", + + "buttonSendKrist": "Wyślij Krist do {{address}}", + "buttonTransferKrist": "Przenieś Krist do {{address}}", + "buttonAddFriend": "Dodaj do książki adresowej", + "buttonEditFriend": "Edytuj w książce adresowej", + "buttonEditWallet": "Edytuj portfel", + + "cardRecentTransactionsTitle": "Ostatnie transakcje", + "cardNamesTitle": "Nazwy", + + "transactionsError": "Wystąpił błąd podczas pobierania transakcji. Zobacz konsolę, aby uzyskać szczegółowe informacje.", + "namesError": "Wystąpił błąd podczas pobierania nazw. Zobacz konsolę, aby uzyskać szczegółowe informacje.", + + "namePurchased": "Zakupiono <1 />", + "nameReceived": "Otrzymano <1 />", + "namesSeeMore": "Zobacz wszystkie {{count, number}}...", + + "resultInvalidTitle": "Nieprawidłowy adres", + "resultInvalid": "To nie wygląda na prawidłowy adres Krist.", + "resultNotFoundTitle": "Adres nie znaleziony", + "resultNotFound": "Ten adres nie został jeszcze zainicjowany w sieci Krist." + }, + + "transactionSummary": { + "itemID": "ID Transakcji: {{id}}", + "itemFrom": "<0>Od: <1 />", + "itemTo": "<0>Do: <1 />", + "itemName": "<0>Nazwa: <1 />", + "itemARecord": "<0>Rekord A: <1 />", + "itemARecordRemoved": "(usunięte)", + "seeMore": "Zobacz wszystkie {{count, number}}..." + }, + + "transactions": { + "title": "Wszystkie Transakcje", + "myTransactionsTitle": "Moje Transakcje", + "nameHistoryTitle": "Historia Nazw", + "nameTransactionsTitle": "Transakcje Nazw", + "searchTitle": "Wyszukiwanie Transakcji", + + "siteTitleWallets": "Moje Transakcje", + "siteTitleNetworkAll": "Wszystkie Transakcje", + "siteTitleNetworkAddress": "{{address}} - Transakcje", + "siteTitleNameHistory": "Historia Nazw", + "siteTitleNameSent": "Transakcje Nazw", + "siteTitleSearch": "Wyszukiwanie Transakcji", + + "subTitleSearchAddress": "Dotyczące {{address}}", + "subTitleSearchName": "Dotyczące {{name}}", + "subTitleSearchMetadata": "Z metadanymi '{{query}}'", + + "columnID": "ID", + "columnType": "Typ", + "columnFrom": "Od", + "columnTo": "Do", + "columnValue": "Wartość", + "columnName": "Nazwa", + "columnMetadata": "Metadane", + "columnTime": "Czas", + + "tableTotal_0": "{{count, number}} pozycja", + "tableTotal_1": "{{count, number}} pozycje", + "tableTotal_2": "{{count, number}} pozycji", + "tableTotalEmpty": "Brak pozycji", + + "includeMined": "Uwzględnij transakcje wydobycia", + + "resultInvalidTitle": "Nieprawidłowy adres.", + "resultInvalid": "To nie wygląda na prawidłowy adres Krist.", + + "types": { + "transferred": "Transfer", + "sent": "Wysłano", + "received": "Otrzymano", + "mined": "Wydobyto", + "name_a_record": "Aktualizacja nazwy", + "name_transferred": "Przeniesienie nazwy", + "name_sent": "Wysłano nazwę", + "name_received": "Otrzymano nazwę", + "name_purchased": "Zakup nazwy", + "bumped": "Podbicie", + "unknown": "Nieznany" + } + }, + + "names": { + "titleWallets": "Moje Nazwy", + "titleNetworkAll": "Wszystkie Nazwy", + "titleNetworkAddress": "Wszystkie Nazwy", + + "siteTitleWallets": "Moje Nazwy", + "siteTitleNetworkAll": "Wszystkie Nazwy", + "siteTitleNetworkAddress": "{{address}} - Nazwy", + + "columnName": "Nazwa", + "columnOwner": "Właściciel", + "columnOriginalOwner": "Pierwotny Właściciel", + "columnRegistered": "Zarejestrowana", + "columnUpdated": "Zaktualizowana", + "columnARecord": "Rekord A", + "columnUnpaid": "Niewypłacone bloki", + + "tableTotal_0": "{{count, number}} nazwa", + "tableTotal_1": "{{count, number}} nazwy", + "tableTotal_2": "{{count, number}} nazw", + "tableTotalEmpty": "Brak nazw", + + "resultInvalidTitle": "Nieprawidłowy adres.", + "resultInvalid": "To nie wygląda na prawidłowy adres Krist." + }, + + "name": { + "title": "Nazwa", + + "buttonSendKrist": "Wyślij Krist do {{name}}", + "buttonTransferKrist": "Przenieś Krist do {{name}}", + "buttonARecord": "Zaktualizuj rekord A.", + "buttonTransferName": "Przenieś nazwę", + + "owner": "Posiadana przez", + "originalOwner": "Kupiona przez", + "registered": "Zarejestrowana", + "updated": "Ostatnia aktualizacja", + "unpaid": "Niewypłacone bloki", + "unpaidCount_0": "{{count, number}} blok", + "unpaidCount_1": "{{count, number}} bloki", + "unpaidCount_2": "{{count, number}} bloków", + "aRecord": "Rekord A", + "aRecordEditTooltip": "Zaktualizuj rekord A", + + "cardRecentTransactionsTitle": "Ostatnie transakcje", + "cardHistoryTitle": "Historia nazw", + "transactionsError": "Wystąpił błąd podczas pobierania transakcji. Zobacz konsolę, aby uzyskać szczegółowe informacje.", + "historyError": "Wystąpił błąd podczas pobierania historii nazw. Zobacz konsolę, aby uzyskać szczegółowe informacje.", + + "resultInvalidTitle": "Błędna nazwa", + "resultInvalid": "To nie wygląda na prawidłowe imię Krist.", + "resultNotFoundTitle": "Nie znaleziono nazwy", + "resultNotFound": "Ta nazwa nie istnieje." + }, + + "blocks": { + "title": "Wszystkie Bloki", + "titleLowest": "Najniższe Bloki", + "siteTitle": "Wszystkie Bloki", + "siteTitleLowest": "Najniższe Bloki", + + "columnHeight": "Wysokość", + "columnAddress": "Wydobył", + "columnHash": "Skrót bloku", + "columnValue": "Wartość", + "columnDifficulty": "Trudność", + "columnTime": "Czas", + + "tableTotal_0": "{{count, number}} blok", + "tableTotal_1": "{{count, number}} bloki", + "tableTotal_2": "{{count, number}} bloków", + "tableTotalEmpty": "Brak bloków" + }, + + "block": { + "title": "Blok", + "siteTitle": "Blok", + "siteTitleBlock": "#{{id, number}} - Blok", + "subTitleBlock": "#{{id, number}}", + + "height": "Wysokość", + "miner": "Wydobył", + "value": "Wartość", + "time": "Czas", + "hash": "Skrót", + "difficulty": "Trudność", + + "previous": "Poprzedni", + "previousTooltip": "Poprzedni blok (#{{id, number}})", + "previousTooltipNone": "Poprzedni blok", + "next": "Kolejny", + "nextTooltip": "Następny blok (#{{id, number}})", + "nextTooltipNone": "Następny blok", + + "resultInvalidTitle": "Nieprawidłowa wysokość bloku", + "resultInvalid": "To nie wygląda na prawidłową wysokość bloku.", + "resultNotFoundTitle": "Nie znaleziono bloku", + "resultNotFound": "Ten blok nie istnieje." + }, + + "transaction": { + "title": "Transakcja", + "siteTitle": "Transakcja", + "siteTitleTransaction": "#{{id, number}} - Transakcja", + "subTitleTransaction": "#{{id, number}}", + + "type": "Typ", + "from": "Od", + "to": "Do", + "address": "Adres", + "name": "Nazwa", + "value": "Wartość", + "time": "Czas", + "aRecord": "Rekord A", + + "cardMetadataTitle": "Metadane", + "tabCommonMeta": "CommonMeta", + "tabRaw": "Nieprzetworzone", + + "commonMetaError": "Przetworzone CommonMeta nie powiodło się.", + "commonMetaParsed": "Przetworzone rekordy", + "commonMetaParsedHelp": "Wartości te nie były bezpośrednio zawarte w metadanych transakcji, ale zostały wywnioskowane przez parser CommonMeta.", + "commonMetaCustom": "Rekordy transakcji", + "commonMetaCustomHelp": "Wartości te były bezpośrednio zawarte w metadanych transakcji.", + "commonMetaColumnKey": "Klucz", + "commonMetaColumnValue": "Wartość", + + "cardRawDataTitle": "Nieprzetworzone", + "cardRawDataHelp": "Transakcja dokładnie tak, jak została zwrócona przez Krist API.", + + "rawDataColumnKey": "Klucz", + "rawDataColumnValue": "Wartość", + + "resultInvalidTitle": "Nieprawidłowy identyfikator transakcji", + "resultInvalid": "To nie wygląda na prawidłowy identyfikator transakcji.", + "resultNotFoundTitle": "Nie znaleziono transakcji", + "resultNotFound": "Ta transakcja nie istnieje." + }, + + "apiErrorResult": { + "resultUnknownTitle": "Nieznany błąd", + "resultUnknown": "Szczegółowe informacje można znaleźć w konsoli." + }, + + "noWalletsResult": { + "title": "Nie ma jeszcze portfeli", + "subTitle": "Obecnie nie masz żadnych portfeli zapisanych w KristWeb, więc nie ma tu jeszcze nic do oglądania. Chcesz dodać portfel?", + "subTitleSendTransaction": "Obecnie nie masz żadnych portfeli zapisanych w KristWeb, więc nie możesz jeszcze dokonać transakcji. Chcesz dodać portfel?", + "button": "Dodaj portfele", + "buttonNetworkTransactions": "Wszystkie transakcje", + "buttonNetworkNames": "Wszystkie nazwy" + }, + + "backups": { + "importButton": "Importuj kopię zapasową", + "exportButton": "Eksportuj kopię zapasową" + }, + + "import": { + "description": "Wklej kod zapasowy (lub zaimportuj z pliku poniżej) i wprowadź odpowiednie hasło główne. Obsługiwane są również kopie zapasowe z KristWeb v1.", + + "masterPasswordPlaceholder": "Hasło główne", + "masterPasswordRequired": "Wymagane jest hasło główne.", + "masterPasswordIncorrect": "Hasło główne jest nieprawidłowe.", + + "appMasterPasswordRequired": "Musisz być uwierzytelniony, aby importować portfele.", + + "fromFileButton": "Importuj z pliku", + "textareaPlaceholder": "Wklej tutaj kod zapasowy", + "textareaRequired": "Wymagany jest kod zapasowy.", + "fileErrorTitle": "Błąd importu", + "fileErrorNotText": "Zaimportowany plik musi być plikiem tekstowym.", + + "overwriteCheckboxLabel": "Zaktualizuj istniejące etykiety portfela, jeśli występują konflikty", + + "modalTitle": "Importuj kopię zapasową", + "modalButton": "Importuj", + + "detectedFormat": "<0>Wykryty format: <2 />", + "detectedFormatKristWebV1": "KristWeb v1", + "detectedFormatKristWebV2": "KristWeb v2", + "detectedFormatInvalid": "Niepoprawny!", + + "decodeErrors": { + "atob": "Nie można zdekodować kopii zapasowej, ponieważ nie jest to poprawny base64!", + "json": "Nie można zdekodować kopii zapasowej, ponieważ nie jest to prawidłowy JSON!", + "missingTester": "Nie można zdekodować kopii zapasowej, ponieważ brakuje w niej klucza 'tester'!", + "missingSalt": "Nie można zdekodować kopii zapasowej, ponieważ brakuje w niej klucza 'salt'!", + "invalidTester": "Nie można zdekodować kopii zapasowej, ponieważ klucz 'tester' jest nieprawidłowego typu!", + "invalidSalt": "Nie można zdekodować kopii zapasowej, ponieważ klucz 'salt' jest nieprawidłowego typu!", + "invalidWallets": "Nie można zdekodować kopii zapasowej, ponieważ klucz 'wallets' jest nieprawidłowego typu!", + "invalidFriends": "Nie można zdekodować kopii zapasowej, ponieważ klucz 'friends' jest nieprawidłowego typu!", + "unknown": "Kopii zapasowej nie można zdekodować z powodu nieznanego błędu. Szczegółowe informacje można znaleźć w konsoli." + }, + + "walletMessages": { + "success": "Portfel został pomyślnie zaimportowany.", + "successSkipped": "Portfel o tym samym adresie ({{address}}) oraz właściwościach już istnieje, więc został pominięty ", + "successUpdated": "Portfel o tym samym adresie ({{address}}) już istnieje. Jego etykieta została zaktualizowana do \"{{label}}\"", + "successSkippedNoOverwrite": "Portfel o tym samym adresie ({{address}}) już istnieje, a Ty zdecydowałeś nie nadpisywać etykiety, więc został pominięty.", + "successImportSkipped": "Portfel z tym samym adresem ({{address}}) został już zaimportowany, więc został pominięty.", + + "warningSyncNode": "Ten portfel miał niestandardowy węzeł synchronizacji, który nie jest obsługiwany w KristWeb v2. Węzeł synchronizacji został pominięty.", + "warningIcon": "Ten portfel miał niestandardową ikonę, która nie jest obsługiwana w KristWeb v2. Ikona została pominięta.", + "warningLabelInvalid": "Etykieta tego portfela jest nieprawidłowa. Etykieta została pominięta.", + "warningCategoryInvalid": "Kategoria tego portfela jest nieprawidłowa. Kategoria została pominięta.", + "warningAdvancedFormat": "Ten portfel wykorzystuje zaawansowany format ({{format}}), który ma ograniczone wsparcie w KristWeb v2.", + + "errorInvalidTypeString": "Ten portfel nie był ciągiem znaków!", + "errorInvalidTypeObject": "Ten portfel nie był obiektem!", + "errorDecrypt": "Nie można odszyfrować tego portfela!", + "errorPasswordDecrypt": "Nie można odszyfrować hasła do tego portfela!", + "errorWalletJSON": "Odszyfrowane dane nie były poprawnymi danymi JSON!", + "errorUnknownFormat": "Ten portfel używa nieznanego lub nieobsługiwanego formatu!", + "errorFormatMissing": "Ten portfel nie posiada formatu!", + "errorUsernameMissing": "W portfelu brakuje nazwy użytkownika!", + "errorPasswordMissing": "W tym portfelu brakuje hasła!", + "errorPrivateKeyMissing": "W tym portfelu brakuje klucza prywatnego!", + "errorMasterKeyMissing": "W tym portfelu brakuje klucza głównego!", + "errorPrivateKeyMismatch": "Hasło tego portfela nie zostało odwzorowane na jego przechowywany klucz prywatny!", + "errorMasterKeyMismatch": "Hasło tego portfela nie zostało przypisane do przechowywanego klucza głównego!", + "errorLimitReached": "Osiągnąłeś limit portfela. Obecnie nie możesz dodać więcej portfeli.", + "errorUnknown": "Wystąpił nieznany błąd. Szczegółowe informacje można znaleźć w konsoli." + }, + + "friendMessages": { + "errorNYI": "Książka adresowa nie została jeszcze zaimplementowana, więc została pominięta." + }, + + "results": { + "noneImported": "Nie zaimportowano żadnych nowych portfeli.", + + "walletsImported_0": "<0>{{count, number}} nowy portfel został zaimportowany.", + "walletsImported_1": "<0>{{count, number}} nowe portfele zostały zaimportowane.", + "walletsImported_2": "<0>{{count, number}} nowych portfeli zostało zaimportowanych.", + "walletsSkipped_0": "{{count, number}} portfel został pominięty.", + "walletsSkipped_1": "{{count, number}} portfele zostały pominięte.", + "walletsSkipped_2": "{{count, number}} portfeli zostało pominiętych.", + + "friendsImported_0": "<0>{{count, number}} nowy znajomy został zaimportowany.", + "friendsImported_1": "<0>{{count, number}} nowi znajomi zostali zaimportowani.", + "friendsImported_2": "<0>{{count, number}} nowych znajomych zostało zaimportowanych.", + "friendsSkipped_0": "{{count, number}} znajomy został pominięty.", + "friendsSkipped_1": "{{count, number}} znajomi zostali pominięci.", + "friendsSkipped_2": "{{count, number}} znajomych zostało pominiętych.", + + "warnings_0": "Wystąpiło <1>{{count, number}} ostrzeżenie podczas importowania kopii zapasowej.", + "warnings_1": "Wystąpiły <1>{{count, number}} ostrzeżenia podczas importowania kopii zapasowej.", + "warnings_2": "Wystąpiło <1>{{count, number}} ostrzeżeń podczas importowania kopii zapasowej.", + "errors_0": "Wystąpił <1>{{count, number}} błąd podczas importowania kopii zapasowej.", + "errors_1": "Wystąpiły <1>{{count, number}} błędy podczas importowania kopii zapasowej.", + "errors_2": "Wystąpiło <1>{{count, number}} błędów podczas importowania kopii zapasowej.", + "errorsAndWarnings": "Wystąpiły <1>{{errors, number}} błąd(ędy) oraz <3>{{warnings, number}} ostrzeżenie(a) podczas importowania kopii zapasowej.", + + "treeHeaderWallets": "Portfele", + "treeHeaderFriends": "Znajomi (Książka adresowa)", + + "treeWallet": "Portfel {{id}}", + "treeFriend": "Znajomy {{id}}" + } + }, + + "walletLimitMessage": "Masz więcej portfeli niż obsługuje KristWeb. Było to spowodowane przez błąd lub celowo pominąłeś ten limit. Spodziewaj się problemów z synchronizacją.", + + "optionalFieldUnset": "(nieustawione)", + + "addressPicker": { + "placeholder": "Wybierz odbiorcę", + "placeholderWalletsOnly": "Wybierz portfel", + + "hintCurrentBalance": "Aktualne saldo: <1 />", + + "errorRecipientRequired": "Odbiorca jest wymagany.", + "errorWalletRequired": "Portfel jest wymagany.", + + "errorInvalidAddress": "Nieprawidłowy adres lub nazwa.", + "errorInvalidAddressOnly": "Nieprawidłowy adres.", + "errorInvalidRecipient": "Nieprawidłowy odbiorca. Musi to być adres lub nazwa.", + "errorInvalidWalletsOnly": "Nieprawidłowy adres portfela.", + "errorEqual": "Odbiorca nie może być ten sam, co nadawca.", + + "categoryWallets": "Portfele", + "categoryOtherWallets": "Inne portfele", + "categoryAddressBook": "Książka adresowa", + "categoryExactAddress": "Dokładny adres", + "categoryExactName": "Dokładna nazwa", + + "addressHint": "Saldo: <1 />", + "addressHintWithNames": "Nazwy: <1>{{names, number}}", + "nameHint": "Właściciel: <1 />", + "nameHintNotFound": "Nie znaleziono nazwy." + }, + + "sendTransaction": { + "title": "Wyślij transakcję", + "siteTitle": "Wyślij transakcję", + + "modalTitle": "Wyślij transakcję", + "modalSubmit": "Wyślij", + + "buttonSubmit": "Wyślij", + + "labelFrom": "Z portfela", + "labelTo": "Do adresu / nazwy", + "labelAmount": "Ilość", + "labelMetadata": "Metadane", + "placeholderMetadata": "Opcjonalne metadane", + + "buttonMax": "Max", + + "errorAmountRequired": "Kwota jest wymagana.", + "errorAmountNumber": "Kwota musi być liczbą.", + "errorAmountTooLow": "Kwota musi wynosić co najmniej 1.", + "errorAmountTooHigh": "Brak wystarczających środków w portfelu.", + + "errorMetadataTooLong": "Metadane muszą mieć mniej niż 256 znaków.", + "errorMetadataInvalid": "Metadane zawierają nieprawidłowe znaki.", + + "errorWalletGone": "Ten portfel już nie istnieje.", + "errorWalletDecrypt": "Nie można odszyfrować Twojego portfela.", + + "errorParameterTo": "Nieprawidłowy odbiorca.", + "errorParameterAmount": "Nieprawidłowa kwota.", + "errorParameterMetadata": "Nieprawidłowe metadane.", + "errorInsufficientFunds": "Brak wystarczających środków w portfelu.", + "errorNameNotFound": "Nie można znaleźć nazwy adresata.", + + "errorUnknown": "Nieznany błąd podczas wysyłania transakcji. Szczegółowe informacje można znaleźć w konsoli.", + + "payLargeConfirmHalf": "Czy na pewno chcesz wysłać <1 />? To ponad połowa Twojego salda!", + "payLargeConfirmAll": "Czy na pewno chcesz wysłać <1 />? To jest całe Twojego saldo!", + + "errorNotificationTitle": "Transakcja nie powiodła się", + "successNotificationTitle": "Transakcja zakończona sukcesem", + "successNotificationContent": "Wysłałeś <1 /> z <3 /> do <5 />.", + "successNotificationButton": "Wyświetl transakcję" + }, + + "authFailed": { + "title": "Autoryzacja nie powiodła się", + "message": "Nie jesteś właścicielem tego adresu.", + "messageLocked": "Ten adres był zablokowany.", + "alert": "Wiadomość z węzła synchronizacji:" + }, + + "whatsNew": { + "title": "Nowości", + "siteTitle": "Nowości", + + "titleKrist": "Krist", + "titleKristWeb": "KristWeb", + + "tooltipGitHub": "Wyświetl w GitHub", + + "cardWhatsNewTitle": "Nowości", + "cardCommitsTitle": "Commits", + "cardCommitsSeeMore": "Zobacz więcej", + + "new": "Nowe!" + } +} diff --git a/public/locales/pt.json b/public/locales/pt.json new file mode 100644 index 0000000..9220fd8 --- /dev/null +++ b/public/locales/pt.json @@ -0,0 +1,837 @@ +{ + "app": { + "name": "KristWeb" + }, + + "nav": { + "connection": { + "online": "Conectado", + "offline": "Disconectado", + "connecting": "Conectando" + }, + + "search": { + "placeholder": "Pesquise na rede Krist", + "placeholderShortcut": "Pesquise na rede Krist ({{shortcut}})", + "rateLimitHit": "Por favor, se acalme!", + "noResults": "Sem resultados.", + + "resultAddress": "Endereço", + "resultName": "Nome", + "resultNameOwner": "Possuído por <1 />", + "resultBlockID": "ID de bloco", + "resultBlockIDMinedBy": "Minerado por <1 />", + "resultTransactionID": "ID de transação", + "resultTransactions": "Transações", + "resultTransactionsAddress": "Pesquisa por transações involvendo <1 />", + "resultTransactionsAddressResult": "<0>{{count, number}} transação envolvendo <2 />", + "resultTransactionsAddressResult_plural": "<0>{{count, number}} transações envolvendo <2 />", + "resultTransactionsAddressResultEmpty": "Nenhuma transação envolve <1 />", + "resultTransactionsName": "Pesquisa por transações envolvendo <1 />", + "resultTransactionsNameResult": "<0>{{count, number}} transação enviada para <2 />", + "resultTransactionsNameResult_plural": "<0>{{count, number}} transações enviadas para <2 />", + "resultTransactionsNameResultEmpty": "Nenhuma transação foi enviada para <1 />", + "resultTransactionsMetadata": "Busca por metadados contendo <1 />", + "resultTransactionsMetadataResult": "<0>{{count, number}} transação com metadados contendo <2 />", + "resultTransactionsMetadataResult_plural": "<0>{{count, number}} transações com metadados contendo <2 />", + "resultTransactionsMetadataResultEmpty": "Nenhuma transação foi feita com metadados contendo <2 />." + }, + + "send": "Enviar", + "request": "Pedir", + + "settings": "Configurações" + }, + + "sidebar": { + "totalBalance": "Saldo", + "dashboard": "Painel", + "myWallets": "Minhas Carteiras", + "addressBook": "Contatos", + "transactions": "Transações", + "names": "Nomes", + "mining": "Mineração", + "network": "Rede", + "blocks": "Bloco", + "statistics": "Estatísticas", + "madeBy": "Um projeto de <1>{{authorName}}", + "hostedBy": "Hospedado por <1>{{host}}", + "github": "GitHub", + "credits": "Créditos", + + "updateTitle": "Atualização disponível!", + "updateDescription": "Uma nova versão da KristWeb está disponível, por favor recarregue a página.", + "updateReload": "Recarregar" + }, + + "dialog": { + "close": "Fechar", + "yes": "Sim", + "no": "Não", + "ok": "OK", + "cancel": "Cancelar" + }, + + "pagination": { + "justPage": "Página {{page}}", + "pageWithTotal": "Página {{page}} de {{total}}" + }, + + "error": "Erro", + "loading": "Carregando...", + + "copy": "Copiar", + "copied": "Copiado!", + + "pageNotFound": { + "resultTitle": "Página não encontrada", + "buttonGoBack": "Voltar" + }, + + "contextualAddressUnknown": "Desconhecido", + "contextualAddressNonExistentTooltip": "Este endereço ainda não foi configurado na rede Krist", + + "typeahead": { + "emptyLabel": "Sem resultados.", + "paginationText": "Mostrar resultados adicionais..." + }, + + "masterPassword": { + "dialogTitle": "Senha mestra", + "passwordPlaceholder": "Senha mestra", + "passwordConfirmPlaceholder": "Confirmar senha mestra", + "createPassword": "Criar senha", + "logIn": "Login", + "forgotPassword": "Perdeu sua senha?", + "intro2": "Digite uma <1>senha mestra para cifrar as chaves privadas de suas carteiras. Elas serão armazenadas no armazenamento local do seu navegador, e a senha mestra será necessária, uma vez por sessão, para decifrá-las.", + "learnMore": "saiba mais", + "errorPasswordRequired": "A senha é necessária.", + "errorPasswordLength": "A senha precisa ter pelo menos um caractere.", + "errorPasswordUnset": "A senha mestra não foi configurada.", + "errorPasswordIncorrect": "Senha incorreta.", + "errorPasswordInequal": "As senhas devem ser iguais.", + "errorStorageCorrupt": "O armazenamento de carteiras está corrompido.", + "errorNoPassword": "A senha mestra é necessária.", + "errorUnknown": "Erro desconhecido.", + "helpWalletStorageTitle": "Ajuda: Armazenamento de Carteiras.", + "popoverTitle": "Decifrar carteiras", + "popoverTitleEncrypt": "Cifrar carteiras", + "popoverAuthoriseButton": "Autorizar", + "popoverDescription": "Entre a sua senha mestra para decifrar suas carteiras.", + "popoverDescriptionEncrypt": "Entre a sua senha mestra para cifrar suas carteiras.", + "forcedAuthWarning": "Você foi logado automáticamente por uma configuração insegura para depuração." + }, + + "myWallets": { + "title": "Carteiras", + "manageBackups": "Gerenciar backups", + "createWallet": "Criar carteira", + "addExistingWallet": "Adicionar carteira existente", + "searchPlaceholder": "Pesquise por carteiras..", + "categoryDropdownAll": "Todas as categorias", + "columnLabel": "Etiqueta", + "columnAddress": "Endereço", + "columnBalance": "Saldo", + "columnNames": "Nomes", + "columnCategory": "Categoria", + "columnFirstSeen": "Apareceu", + "nameCount": "{{count, number}} nome", + "nameCount_plural": "{{count, number}} nomes", + "nameCountEmpty": "Nenhum nome", + "firstSeen": "Apareceu em {{date}}", + + "walletCount": "{{count, number}} carteira", + "walletCount_plural": "{{count, number}} carteiras", + "walletCountEmpty": "Nenhuma carteira", + + "actionsEditTooltip": "Editar carteira", + "actionsSendTransaction": "Enviar Krist", + "actionsWalletInfo": "Informações da carteira", + "actionsDelete": "Deletar carteira", + "actionsDeleteConfirm": "Tem certeza que quer deletar essa carteira?", + "actionsDeleteConfirmDescription": "Se você não fez backup ou salvou sua senha, ela será perdida para sempre!", + + "tagDontSave": "Temporária", + "tagDontSaveTooltip": "Carteira temporária", + + "info": { + "title": "Informação da carteira - {{address}}", + + "titleBasicInfo": "Informações Básicas", + "id": "ID", + "label": "Etiqueta", + "category": "Categoria", + "username": "Nome de Usuário", + "password": "Senha", + "privatekey": "Chave Privada", + "format": "Formato", + + "titleSyncedInfo": "Informações Sincronizadas", + "address": "Endereço", + "balance": "Saldo", + "names": "Nomes", + "firstSeen": "Apareceu", + "existsOnNetwork": "Existe na Rede", + "lastSynced": "Sincronizada pela ultima vez em", + + "titleAdvancedInfo": "Informação Avançada", + "encPassword": "Senha cifrada", + "encPrivatekey": "Chave privada cifrada", + "saved": "Salvada", + + "revealLink": "Revelar", + "hideLink": "Esconder", + + "true": "Sim", + "false": "Não" + } + }, + + "myTransactions": { + "title": "Transações", + "searchPlaceholder": "Pesquisa por transações", + "columnFrom": "De", + "columnTo": "Para", + "columnValue": "Valor", + "columnTime": "Quando" + }, + + "status": "A KristWeb 2 ainda está em desenvolvimento. Se você não é um doador, você não deveria estar aqui. Não hospede este site.", + + "addWallet": { + "dialogTitle": "Adicionar carteira", + "dialogTitleCreate": "Criar carteira", + "dialogTitleEdit": "Editar carteira", + "dialogOkAdd": "Adicionar", + "dialogOkCreate": "Criar", + "dialogOkEdit": "Salvar", + "dialogAddExisting": "Adicionar carteira existente", + + "walletLabel": "Etiqueta", + "walletLabelPlaceholder": "Etiqueta da carteira (opcional)", + "walletLabelMaxLengthError": "Não mais que 32 caracteres", + "walletLabelWhitespaceError": "Não pode ser só espaços", + + "walletCategory": "Categoria", + "walletCategoryDropdownNone": "Sem categoria", + "walletCategoryDropdownNew": "Nova", + "walletCategoryDropdownNewPlaceholder": "Nome da categoria", + + "walletAddress": "Endereço", + "walletUsername": "Nome de usuário", + "walletUsernamePlaceholder": "Nome de usuário da carteira", + "walletPassword": "Senha", + "walletPasswordPlaceholder": "Senha da carteira", + "walletPasswordWarning": "Certifique-se que estas informações foram salvas de forma <1>segura!", + "walletPasswordRegenerate": "Recriar", + "walletPrivatekey": "Chave privada", + "walletPrivatekeyPlaceholder": "Chave privada da carteira", + + "advancedOptions": "Opções Avançadas", + + "walletFormat": "Formato da carteira", + "walletFormatKristWallet": "KristWallet, KWallet (recomendado)", + "walletFormatKristWalletUsernameAppendhashes": "KW-Username (appendhashes)", + "walletFormatKristWalletUsername": "KW-Username (pre-appendhashes)", + "walletFormatJwalelset": "jwalelset", + "walletFormatApi": "Raw/API (para usuários avançados)", + + "walletSave": "Salvar esta carteira na KristWeb", + + "messageSuccessAdd": "Carteira adicionada!", + "messageSuccessCreate": "Carteira criada!", + "messageSuccessEdit": "Carteira salva!", + + "errorPasswordRequired": "A senha é necessária.", + "errorPrivatekeyRequired": "A chave privada é necessária.", + "errorUnexpectedTitle": "Erro inesperado.", + "errorUnexpectedDescription": "Houve um erro ao adicionar a carteria. Consulte o console para mais detalhes.", + "errorUnexpectedEditDescription": "Houve um erro ao editar a carteria. Consulte o console para mais detalhes.", + "errorDuplicateWalletTitle": "Carteira já existente", + "errorDuplicateWalletDescription": "Você já tem uma carteira para este endereço", + "errorMissingWalletTitle": "Carteira não encontrada", + "errorMissingWalletDescription": "A carteira que você está tentando editar já não existe.", + "errorDecryptTitle": "Senha-mestra incorreta", + "errorDecryptDescription": "Não foi possível decifrar a senha da carteira. A senha-mestra está correta?", + "errorWalletLimitTitle": "Limite de carteiras alcançado", + "errorWalletLimitDescription": "Você não pode adicionar mais carteiras no momento." + }, + + "dashboard": { + "siteTitle": "Painel", + + "inDevBanner": "Bem-vindo à beta particular da KristWeb v2! Este site ainda está em desenvolvimento, então muita funcionalidade está faltando. Por favor informe todos os problemas no <1>GitHub. Obrigado!", + + "walletOverviewCardTitle": "Carteiras", + "walletOverviewTotalBalance": "Saldo total", + "walletOverviewNames": "Nomes", + "walletOverviewNamesCount": "{{count, number}} nome", + "walletOverviewNamesCount_plural": "{{count, number}} nomes", + "walletOverviewNamesCountEmpty": "Nenhum nome", + "walletOverviewSeeMore": "Ver todos os {{count, number}}...", + "walletOverviewAddWallets": "Adicionar carteiras...", + + "transactionsCardTitle": "Transações", + "transactionsError": "Houve um erro carregando suas transações. Consulte o console para mais detalhes.", + + "blockValueCardTitle": "Valor do bloco", + "blockValueBaseValue": "Valor base (<1>)", + "blockValueBaseValueNames": "{{count, number}} nome", + "blockValueBaseValueNames_plural": "{{count, number}} nomes", + "blockValueNextDecrease": "Cairá por <1> em <3>{{count, number}} bloco", + "blockValueNextDecrease_plural": "Cairá por <1> em <3>{{count, number}} blocos", + "blockValueReset": "Reseta em <1>{{count, number}} bloco", + "blockValueReset_plural": "Reseta em <1>{{count, number}} blocos", + "blockValueEmptyDescription": "O valor dos blocos sobe quando <1>nomes são comprados.", + + "blockDifficultyCardTitle": "Dificuldade dos blocos", + "blockDifficultyError": "Houve um erro carregando a dificuldade dos blocos. Consulte o console para mais detalhes.", + "blockDifficultyHashRate": "Apróx. <1 />", + "blockDifficultyHashRateTooltip": "Estimativa do hashrate combinado da rede, baseado no trabalho.", + "blockDifficultyChartWork": "Difficuldade dos Blocos", + "blockDifficultyChartLinear": "Linear", + "blockDifficultyChartLog": "Logarítmica", + + "motdCardTitle": "Mensagem do Dia", + "motdDebugMode": "Esse nó é um servidor de desenvolvimento não-oficial. Saldos e transações podem ser manipulados. Tenha cuidado.", + + "whatsNewCardTitle": "O que há de novo" + }, + + "credits": { + "title": "Crétidos", + "madeBy": "Feito por <1>{{authorName}}", + "hostedBy": "Hospedado por <1>{{host}}", + "supportersTitle": "Apoiadores", + "supportersDescription": "Este projeto foi feito possível pelos seguintes incríveis apoiadores:", + "supportButton": "Apoie a KristWeb", + "translatorsTitle": "Tradutores", + "translatorsDescription": "Este projeto foi traduzido pelos seguintes incríveis contribuidores:", + "translateButton": "Traduza a Kristweb", + "tmpim": "Criado pela tmpim", + + "versionInfo": { + "version": "Versão", + "commitHash": "Commit", + "buildTime": "Hora da compilação" + } + }, + + "settings": { + "siteTitle": "Configurações", + "title": "Configurações", + + "messageSuccess": "Configuração alterada com sucesso!", + + "settingIntegerSave": "Salvar", + + "menuLanguage": "Linguagem", + + "subMenuAutoRefresh": "Reload automático", + "autoRefreshTables": "Reload automático das tabelas", + "autoRefreshTablesDescription": "Controla se tabelas largas (ex.: transações ou nomes) devem recarregar automáticamente com mudanças na rede.", + "autoRefreshAddressPage": "Reload automático dos endereços", + "autoRefreshNamePage": "Reload automtico dos nomes", + + "subMenuAdvanced": "Configurações automáticas", + "alwaysIncludeMined": "Sempre incluir transações de mineração nas listagens (pode ser necessário recarregar)", + "copyNameSuffixes": "Incluir o sufixo quando copiar um nome", + "addressCopyButtons": "Mostrar botões de copiar ao lado de todos os endereços", + "nameCopyButtons": "Mostrar botões de copiar ao lado de todos os nomes", + "blockHashCopyButtons": "Mostrar botões de copiar ao lado de todos os hashes de bloco", + "showRelativeDates": "Use datas relativas no lugar de absolutas", + "showRelativeDatesDescription": "No site todo, se menos de 7 dias tiverem passado, uma data relativa será usada no lugar de uma absoluta.", + "transactionDefaultRaw": "Abra a guia 'Raw' e não a página 'CommonMeta' na página de transações", + "defaultPageSize": "Tamanho padrão de página para tabelas", + + "subMenuDebug": "Configurações de depuração", + "advancedWalletFormats": "Formatos avançados de carteira", + "menuTranslations": "Traduções", + + "subTitleTranslations": "Traduções", + + "translations": { + "errorMissingLanguages": "O arquivo languages.json está faltando. Você compilou a KristWeb corretamente?", + "errorNoKeys": "Sem chaves de tradução", + "importedLanguageTitle": "Língua importada", + + "columnLanguageCode": "Código", + "columnLanguage": "Linguagem", + "columnKeys": "Chaves", + "columnMissingKeys": "Chaves faltantes", + "columnProgress": "Progresso", + + "tableUntranslatedKeys": "Chaves não traduzidas", + "columnKey": "Chave", + "columnEnglishString": "String em Inglês", + + "importJSON": "Importar de JSON", + "exportCSV": "Exportar como CSV" + } + }, + + "breadcrumb": { + "dashboard": "Painel", + "wallets": "Carteiras", + + "settings": "Configurações", + "settingsDebug": "Depuração", + "settingsTranslations": "Traduções" + }, + + "ws": { + "errorToken": "Houve um erro ao conectar-se ao websocket do servidor Krist", + "errorWS": "Houve um erro ao conectar-se ao websocket do servidor Krist (código <1>{{code}})." + }, + + "rateLimitTitle": "Limite de pedidos atingido", + "rateLimitDescription": "Muitas requisições foram feitas ao servidor Krist em um período curto de tempo. Isso provávelmente é um bug!", + + "address": { + "title": "Endereço", + + "walletLabel": "Etiqueta:", + "walletCategory": "Categoria:", + + "balance": "Saldo", + "names": "Nomes", + "nameCount": "{{count, number}} nome", + "nameCount_plural": "{{count, number}} nomes", + "nameCountEmpty": "Nenhum nome", + "firstSeen": "Apareceu", + + "buttonSendKrist": "Enviar Krist para {{address}}", + "buttonTransferKrist": "Transferir Krist para {{address}}", + "buttonAddFriend": "Adicionar aos contatos", + "buttonEditFriend": "Editar nos contatos", + "buttonEditWallet": "Editar carteira", + + "cardRecentTransactionsTitle": "Transações recentes", + "cardNamesTitle": "Nomes", + + "transactionsError": "Houve um erro carregando as transações. Consulte o console para mais detalhes.", + "namesError": "Houve um erro carregando as transações. Consulte o console para mais detalhes.", + + "namePurchased": "Comprou <1 />", + "nameReceived": "Recebeu <1 />", + "namesSeeMore": "Ver todos os {{count, number}}...", + + "resultInvalidTitle": "Endereço inválido", + "resultInvalid": "Isso não parece um endereço Krist válido.", + "resultNotFoundTitle": "Endereço não encontrado", + "resultNotFound": "Este endereço ainda não foi configurado na rede Krist." + }, + + "transactionSummary": { + "itemID": "ID da Transação: {{id}}", + "itemFrom": "<0>De: <1 />", + "itemTo": "<0>Para: <1 />", + "itemName": "<0>Nome: <1 />", + "itemARecord": "<0>A record: <1 />", + "itemARecordRemoved": "(removido)", + "seeMore": "Ver todas as {{count, number}}..." + }, + + "transactions": { + "title": "Transações na Rede", + "myTransactionsTitle": "Minas Transações", + "nameHistoryTitle": "Histórico de Nomes", + "nameTransactionsTitle": "Transações de Nomes", + "searchTitle": "Busca por Transações", + + "siteTitleWallets": "Sem Transações", + "siteTitleNetworkAll": "Transactions na Rede", + "siteTitleNetworkAddress": "Transações do {{address}}", + "siteTitleNameHistory": "Histórico de Nomes", + "siteTitleNameSent": "Transações de Nomes", + "siteTitleSearch": "Busca por Transações", + + "subTitleSearchAddress": "Envolvendo {{address}}", + "subTitleSearchName": "Envolvendo {{name}}", + "subTitleSearchMetadata": "Com metadados '{{query}}'", + + "columnID": "ID", + "columnType": "Tipo", + "columnFrom": "De", + "columnTo": "Para", + "columnValue": "Valor", + "columnName": "Nome", + "columnMetadata": "Metadados", + "columnTime": "Tempo", + + "tableTotal": "{{count, number}} item", + "tableTotal_plural": "{{count, number}} itens", + "tableTotalEmpty": "Nenhum item", + + "includeMined": "Incluir transações de mineração", + + "resultInvalidTitle": "Endereço inválido", + "resultInvalid": "Isso não parece um endereço válido.", + + "types": { + "transferred": "Transferência", + "sent": "Envio", + "received": "Recebimento", + "mined": "Mineração", + "name_a_record": "Atualização de Nome", + "name_transferred": "Transferência de Nome", + "name_sent": "Envio de Nome", + "name_received": "Recebimento de Nome", + "name_purchased": "Compra de Nome", + "bumped": "Batida", + "unknown": "Desconhecido" + } + }, + + "names": { + "titleWallets": "Meus Nomes", + "titleNetworkAll": "Nomes da Rede", + "titleNetworkAddress": "Nomes da Rede", + + "siteTitleWallets": "Meus Nomes", + "siteTitleNetworkAll": "Nomes na Rede", + "siteTitleNetworkAddress": "{{address}} - Nomes", + + "columnName": "Nome", + "columnOwner": "Dono", + "columnOriginalOwner": "Dono Original", + "columnRegistered": "Registrado", + "columnUpdated": "Atualizado", + "columnARecord": "A Record", + "columnUnpaid": "Blocos não pagos", + + "tableTotal": "{{count, number}} nome", + "tableTotal_plural": "{{count, number}} nomes", + "tableTotalEmpty": "Nenhum nome", + + "resultInvalidTitle": "Endereço inválido", + "resultInvalid": "Isso não parece um endereço Krist válido." + }, + + "name": { + "title": "Nome", + + "buttonSendKrist": "Enviar Krist para {{name}}", + "buttonTransferKrist": "Transferir Krist para {{name}}", + "buttonARecord": "Atualizar A record", + "buttonTransferName": "Transferir nome", + + "owner": "Possuído por", + "originalOwner": "Comprado por", + "registered": "Registrado", + "updated": "Atualizado pela última vez em", + "unpaid": "Blocos não-pagos", + "unpaidCount": "{{count, number}} bloco", + "unpaidCount_plural": "{{count, number}} blocos", + "aRecord": "A record", + "aRecordEditTooltip": "Atualizar A record", + + "cardRecentTransactionsTitle": "Transações recentes", + "cardHistoryTitle": "Histórico do nome", + "transactionsError": "Houve um erro carregando as transações, consulte o console para saber mais.", + "historyError": "Houve um erro carregando o histórico do nome, consulte o console para saber mais.", + + "resultInvalidTitle": "Nome inválido", + "resultInvalid": "Isso não parece um nome Krist válido.", + "resultNotFoundTitle": "Nome não encontrado", + "resultNotFound": "Este nome não existe." + }, + + "blocks": { + "title": "Blocos na Rede", + "titleLowest": "Blocos mais Baixos", + "siteTitle": "Blocos na Rede", + "siteTitleLowest": "Blocos mais Baixos", + + "columnHeight": "Altura", + "columnAddress": "Minerador", + "columnHash": "Hash do bloco", + "columnValue": "Valor", + "columnDifficulty": "Dificuldade", + "columnTime": "Data", + + "tableTotal": "{{count, number}} bloco", + "tableTotal_plural": "{{count, number}} blocos", + "tableTotalEmpty": "Nenhum bloco" + }, + + "block": { + "title": "Bloco", + "siteTitle": "Bloco", + "siteTitleBlock": "Bloco #{{id, number}}", + "subTitleBlock": "#{{id, number}}", + + "height": "Altura", + "miner": "Minerador", + "value": "Valor", + "time": "Data", + "hash": "Hash", + "difficulty": "Dificuldade", + + "previous": "Anterior", + "previousTooltip": "Bloco anterior (#{{id, number}})", + "previousTooltipNone": "Bloco anterior", + "next": "Próximo", + "nextTooltip": "Próximo bloco (#{{id, number}})", + "nextTooltipNone": "Próximo bloco", + + "resultInvalidTitle": "Altura inválida", + "resultInvalid": "Isso não parece uma altura válida para um bloco.", + "resultNotFoundTitle": "Bloco não encontrado", + "resultNotFound": "Este bloco não existe." + }, + + "transaction": { + "title": "Transação", + "siteTitle": "Transação", + "siteTitleTransaction": "Transação #{{id, number}}", + "subTitleTransaction": "#{{id, number}}", + + "type": "Tipo", + "from": "De", + "to": "Para", + "address": "Endereço", + "name": "Nome", + "value": "Valor", + "time": "Data", + "aRecord": "A Record", + + "cardMetadataTitle": "Metadados", + "tabCommonMeta": "CommonMeta", + "tabRaw": "Raw", + + "commonMetaError": "Reconhecimento da CommonMeta falhou.", + "commonMetaParsed": "Valores extraídos", + "commonMetaParsedHelp": "Estes valores não estavam contidos diretamente nos metadados, mas eles foram inferidos pelo reconhecedor CommonMeta.", + "commonMetaCustom": "Valores da transação", + "commonMetaCustomHelp": "Estes valores estavam contidos diretamente nos metadados.", + "commonMetaColumnKey": "Chave", + "commonMetaColumnValue": "Valor", + + "cardRawDataTitle": "Dados Crus", + "cardRawDataHelp": "Esta transação é exatamente como retornada pela API Krist.", + + "rawDataColumnKey": "Chave", + "rawDataColumnValue": "Valor", + + "resultInvalidTitle": "ID de Transação inválido", + "resultInvalid": "Isso não parece um ID de transação válido.", + "resultNotFoundTitle": "Transação não encontrada", + "resultNotFound": "Esta transação não existe." + }, + + "apiErrorResult": { + "resultUnknownTitle": "Erro desconhecido", + "resultUnknown": "Consulte o console para saber mais." + }, + + "noWalletsResult": { + "title": "Sem carteiras por enquanto", + "subTitle": "Você atualmente não tem carteiras salvas na KristWeb, então não tem nada para ver aqui. Gostaria de adicionar uma carteira?", + "subTitleSendTransaction": "Você atualmente não tem carteiras salvas na KristWeb, então você não pode fazer transações. Gostaria de adicionar uma carteira?", + "button": "Adicionar carteiras", + "buttonNetworkTransactions": "Transações na rede", + "buttonNetworkNames": "Nomes na rede" + }, + + "backups": { + "importButton": "Importar backup", + "exportButton": "Exportar backup" + }, + + "import": { + "description": "Cole o código do backup (ou importe de um arquivo abaixo) e digite a senha mestra correspondente. Backups da KristWeb v1 também são aceitos.", + + "masterPasswordPlaceholder": "Senha mestra", + "masterPasswordRequired": "A senha mestra é necessária.", + "masterPasswordIncorrect": "A senha mestra está incorreta.", + + "appMasterPasswordRequired": "Você deve estar autenticado para importar carteiras", + + "fromFileButton": "Importar de um arquivo", + "textareaPlaceholder": "Cole o código do backup aqui.", + "textareaRequired": "O código do backup é necessário.", + "fileErrorTitle": "Erro de importação", + "fileErrorNotText": "O arquivo importado deve ser texto-pleno.", + + "overwriteCheckboxLabel": "Atualize carteiras existentes se houverem conflitos.", + + "modalTitle": "Importar backup", + "modalButton": "Importar", + + "detectedFormat": "<0>Formato detectado: <2 />", + "detectedFormatKristWebV1": "KristWeb v1", + "detectedFormatKristWebV2": "KristWeb v2", + "detectedFormatInvalid": "Inválido!", + + "decodeErrors": { + "atob": "O backup não pôde ser decodificado por que não é base64 válido!", + "json": "O backup não pôde ser decodificado por que não é JSON válido!", + "missingTester": "O backup não pôde ser decodificado por que não tem uma chave 'tester'!", + "missingSalt": "O backup não pôde ser decodificado por que não tem uma chave 'salt'!", + "invalidTester": "O backup não pôde ser decodificado por que a chave 'tester' é do tipo errado!", + "invalidSalt": "O backup não pôde ser decodificado por que a chave 'salt' é do tipo errado!", + "invalidWallets": "O backup não pôde ser decodificado por que a chave 'wallets' é do tipo errado!", + "invalidFriends": "O backup não pôde ser decodificado por que a chave 'friends' é do tipo errado!", + "unknown": "O backup não pôde ser decodificado por um erro desconhecido. Veja o console para saber mais." + }, + + "walletMessages": { + "success": "Carteira importada com sucesso", + "successSkipped": "Uma carteira com o mesmo endereço ({{address}}) e configurações já existe, então foi ignorada.", + "successUpdated": "Uma carteira com o mesmo endereço ({{address}}) já existe. Sua etiqueta foi atualizada para \"{{label}}\"", + "successSkippedNoOverwrite": "Uma carteira com o mesmo endereço ({{address}}) já existe, e você escolheu não sobrescrever a etiqueta, então ela foi ignorada.", + "successImportSkipped": "Uma carteira com o mesmo endereço ({{address}}) já foi importada, então ela foi ignorada.", + + "warningSyncNode": "Essa carteira tinha um servidor personalizado, que não é suportado na KristWeb v2. O servidor foi pulado.", + "warningIcon": "Essa carteira tinha um ícone personalizado, que não é suportado na KristWeb v2. O ícone foi pulado.", + "warningLabelInvalid": "A etiqueta para essa carteira era inválida. A etiqueta foi pulada.", + "warningCategoryInvalid": "A categoria para essa carteira era inválida. A categoria foi pulada.", + "warningAdvancedFormat": "Essa carteira usa um formato avançado ({{format}}), para qual a KristWeb v2 tem suporte limitado.", + + "errorInvalidTypeString": "Essa carteira não era uma string!", + "errorInvalidTypeObject": "Essa carteira não era um objeto!", + "errorDecrypt": "Essa carteira não pôde ser decifrada!", + "errorPasswordDecrypt": "A senha dessa carteira não pôde ser decifrada!", + "errorWalletJSON": "Os dados decifrados não eram JSON válidos!", + "errorUnknownFormat": "Essa carteira usa um formato inválido ou desconhecido!", + "errorFormatMissing": "Essa carteira não tem um formato!", + "errorUsernameMissing": "Essa carteira não tem um nome de usuário!", + "errorPasswordMissing": "Essa carteira não tem uma senha!", + "errorPrivateKeyMissing": "Essa carteira não tem uma chave privada!", + "errorMasterKeyMissing": "Essa carteira não tem uma chave mestra!", + "errorPrivateKeyMismatch": "A senha dessa carteira não bateu com a sua chave privada!", + "errorMasterKeyMismatch": "A senha dessa carteira não bateu com a sua chave-mestra!", + "errorLimitReached": "Você atingiu o limite de carteiras, e não pode adicionar mais no momento.", + "errorUnknown": "Um erro desconhecido aconteceu. Consulte o console para saber mais." + }, + + "friendMessages": { + "errorNYI": "A ferramenta 'Contatos' ainda não foi implmementada, e foi pulada." + }, + + "results": { + "noneImported": "Nenhuma carteira nova foi importada.", + + "walletsImported": "<0>{{count, number}} nova carteira foi importada.", + "walletsImported_plural": "<0>{{count, number}} novas carteiras foram importadas.", + "walletsSkipped": "{{count, number}} carteira foi pulada.", + "walletsSkipped_plural": "{{count, number}} carteiras foram puladas.", + + "friendsImported": "<0>{{count, number}} novo contato foi importado.", + "friendsImported_plural": "<0>{{count, number}} novos contatos foram importados.", + "friendsSkipped": "{{count, number}} amigo foi pulado.", + "friendsSkipped_plural": "{{count, number}} amigos foram pulados.", + + "warnings": "Houve <1>{{count, number}} aviso enquanto seu backup era importado.", + "warnings_plural": "Houveram <1>{{count, number}} avisos enquanto seu backup era importado.", + "errors": "Houve <1>{{count, number}} erro enquanto seu backup era importado.", + "errors_plural": "Houveram <1>{{count, number}} erros enquanto seu backup era importado.", + "errorsAndWarnings": "Houveram <1>{{errors, number}} erro(s) e <3>{{warnings, number}} aviso(s) enquanto seu backup era importado.", + + "treeHeaderWallets": "Carteiras", + "treeHeaderFriends": "Contatos", + + "treeWallet": "Carteira {{id}}", + "treeFriend": "Contato {{id}}" + } + }, + + "walletLimitMessage": "Você tem mais carteiras carregadas que a KristWeb suporta. Ou isso é um bug, ou você ultrapassou o limite intensionalmente. Problemas com a sincronização podem ocorrer.", + + "optionalFieldUnset": "(nenhum)", + + "addressPicker": { + "placeholder": "Escolha um destinatário", + "placeholderWalletsOnly": "Escolha a carteira", + + "hintCurrentBalance": "Saldo: <1 />", + + "errorRecipientRequired": "O destinatário é necessário.", + "errorWalletRequired": "A carteira é necessária.", + + "errorInvalidAddress": "Endereço ou nome inválido.", + "errorInvalidAddressOnly": "Endereço inválido.", + "errorInvalidRecipient": "Destinatário inválido, deve ser um endereço ou nome.", + "errorInvalidWalletsOnly": "Endereço de carteira inválido.", + "errorEqual": "Destinatário não pode ser o mesmo que o remetente.", + + "categoryWallets": "Carteiras", + "categoryOtherWallets": "Outras carteiras", + "categoryAddressBook": "Contatos", + "categoryExactAddress": "Endereço exato", + "categoryExactName": "Nome exato", + + "addressHint": "Saldo: <1 />", + "addressHintWithNames": "Nomes: <1>{{names, number}}", + "nameHint": "Dono: <1 />", + "nameHintNotFound": "Nome não encontrado." + }, + + "sendTransaction": { + "title": "Enviar Transação", + "siteTitle": "Enviar Transação", + + "modalTitle": "Enviar Transação", + "modalSubmit": "Enviar", + + "buttonSubmit": "Enviar", + + "labelFrom": "Da carteira", + "labelTo": "Para o endereço/nome", + "labelAmount": "Quantidade", + "labelMetadata": "Metadados", + "placeholderMetadata": "Metadados opcionais", + + "buttonMax": "Máximo", + + "errorAmountRequired": "A quantidade é necessária.", + "errorAmountNumber": "A quantidade deve ser um número.", + "errorAmountTooLow": "A quantidade deve ser positiva.", + "errorAmountTooHigh": "Saldo insuficiente.", + + "errorMetadataTooLong": "Os metadados devem ser menos de 256 caracteres.", + "errorMetadataInvalid": "Os metadados contém caracteres inválidos.", + + "errorWalletGone": "Essa carteira já não existe.", + "errorWalletDecrypt": "Sua carteira não pôde ser decifrada", + + "errorParameterTo": "Destinatário inválido.", + "errorParameterAmount": "Quantidade inválida.", + "errorParameterMetadata": "Metadados inválidos.", + "errorInsufficientFunds": "Saldo insuficiente na carteira.", + "errorNameNotFound": "O destinatário não pôde ser encontado.", + + "errorUnknown": "Erro desconhecido fazendo a transação. Consulte o console para saber mais.", + + "payLargeConfirmHalf": "Você tem certeza que quer mandar <1 />? É mais que metade do seu saldo!", + "payLargeConfirmAll": "Você tem certeza que quer mandar <1 />? É o seu saldo inteiro!", + + "errorNotificationTitle": "Transação falhou", + "successNotificationTitle": "Transação concluída", + "successNotificationContent": "Você mandou <1 /> de <3 /> para <5 />.", + "successNotificationButton": "Ver transação" + }, + + "authFailed": { + "title": "Falha de autenticação", + "message": "Você não é dono deste endereço.", + "messageLocked": "Este endereço foi trancado.", + "alert": "Mensagem do servidor:" + }, + + "whatsNew": { + "title": "Novidades", + "siteTitle": "Novidades", + + "titleKrist": "Krist", + "titleKristWeb": "KristWeb", + + "tooltipGitHub": "Ver no GitHub", + + "cardWhatsNewTitle": "Novidades", + "cardCommitsTitle": "Commits", + "cardCommitsSeeMore": "Ver mais", + "new": "Novidade!" + } +} diff --git a/public/locales/vi.json b/public/locales/vi.json new file mode 100644 index 0000000..70718be --- /dev/null +++ b/public/locales/vi.json @@ -0,0 +1,109 @@ +{ + "app": { + "name": "KristWeb" + }, + + "nav": { + "connection": { + "online": "Trực tuyến", + "offline": "Ngoại tuyến", + "connecting": "Đang kết nối" + }, + + "search": "Tiềm kiếm mạng Krist", + + "send": "Gửi", + "request": "Yêu cầu" + }, + + "sidebar": { + "totalBalance": "Tổng số dư", + "guestIndicator": "Đang duyệt với tư cách khách", + "dashboard": "Tổng quat", + "myWallets": "Những ví của bạn", + "addressBook": "Sổ địa chỉ", + "transactions": "Giao dịch", + "names": "Tên miền", + "mining": "Khai thác", + "network": "Mạng lưới", + "blocks": "Khối", + "statistics": "Thống kê", + "madeBy": "Thực hiện bởi <1>{{authorName}}", + "hostedBy": "Được lưu trữ bởi <1>{{host}}", + "github": "GitHub", + "credits": "Ghi công" + }, + + "dialog": { + "close": "Đóng" + }, + + "pagination": { + "justPage": "Trang {{page}}", + "pageWithTotal": "Trang {{page}} trên {{total}}" + }, + + "loading": "Đang tải...", + + "masterPassword": { + "dialogTitle": "Mật khẩu chính", + "passwordPlaceholder": "Mật khẩu chính", + "browseAsGuest": "Duyệt với tư cách khách", + "createPassword": "Tạo mật khẩu", + "logIn": "Đăng nhập", + "forgotPassword": "Bạn quên mật khẩu?", + "intro": "Nhập mật khẩu chính để mã hóa ví của bạn hoặc sử dụng KristWeb với tư cách khách. <1>.", + "dontForgetPassword": "Không bao giờ quên mật khẩu này. Nếu bạn quên nó, bạn sẽ phải tạo một mật khẩu chánh mới và thêm ví của bạn trên một lần nữa.", + "loginIntro": "Nhập mật khẩu chính để truy cập ví của bạn hoặc duyệt KristWeb với tư cách khách.", + "learnMore": "Tìm hiểu thêm", + "errorPasswordRequired": "Mật khẩu là bắc buộc.", + "errorPasswordUnset": "Mậc khẩu chính chưa đuộc thiết lạp.", + "errorPasswordIncorrect": "Mật khẩu không đúng.", + "errorStorageCorrupt": "Chỗ lưu trữ ví bị hỏng.", + "errorUnknown": "Lỗi không xác định.", + "helpWalletStorageTitle": "Trợ giúp: Lưu trữ ví", + "helpWalletStorage": "Khi bạn thêm ví vào KristWeb, mã khóa bí mật của ví sẽ được lưu vào bộ nhớ cục bộ của trình duyệt và được mã hóa bằng mật khẩu chính của bạn.\nMọi ví của bạn lưu đều được mã hóa bằng cùng một mật khẩu chính và bạn sẽ cần nhập mật khẩu đó mỗi khi mở KristWeb. Ví Krist thực tế của bạn không được sửa đổi theo bất kỳ cách nào.\nKhi duyệt KristWeb với tư cách khách, bạn không cần phải nhập mật khẩu chính, nhưng điều đó cũng có nghĩa là bạn sẽ không thể thêm hoặc sử dụng bất cứ ví nào. Bạn vẫn có thể khám phá mạng Krist." + }, + + "myWallets": { + "title": "Ví", + "manageBackups": "Quản lý các bản sao lưu", + "createWallet": "Tạo ví", + "addExistingWallet": "Thêm ví hiện có", + "searchPlaceholder": "Tìm ví...", + "categoryDropdownAll": "Tất cả danh mục", + "columnLabel": "Nhãn", + "columnAddress": "Địa chỉ", + "columnBalance": "Só dư", + "columnNames": "Tên miền", + "columnCategory": "Danh mục", + "columnFirstSeen": "Lần đầu tiên nhìn thấy", + "nameCount": "{{count}} tên miền", + "nameCount_plural": "{{count}} tên miền", + "firstSeen": "Lần đầu tiên nhìn thấy {{date}}" + }, + + "myTransactions": { + "title": "Giao dịch", + "searchPlaceholder": "Tìm kiếm các giao dịch...", + "columnFrom": "Từ", + "columnTo": "Đến", + "columnValue": "Giá trị", + "columnTime": "Giờ" + }, + + "addWallet": { + "dialogTitle": "Thêm ví", + "dialogTitleCreate": "Tạo ví" + }, + + "credits": { + "madeBy": "Thực hiện bởi <1>{{authorName}}", + "supportersTitle": "Người ủng hộ", + "supportersDescription": "Dự án này đã được thực hiện bởi những người ủng hộ tuyệt vời sau đây:", + "supportButton": "Ủng hộ KristWeb", + "translatorsTitle": "Người dịch", + "translatorsDescription": "Dự án này đã được dịch bởi những người đóng góp tuyệt vời sau đây:", + "translateButton": "Dịch KristWeb" + } +} diff --git a/public/logo192.png b/public/logo192.png index fc44b0a..3cb2c26 100644 --- a/public/logo192.png +++ b/public/logo192.png Binary files differ diff --git a/public/logo512.png b/public/logo512.png index a4e47a6..773b435 100644 --- a/public/logo512.png +++ b/public/logo512.png Binary files differ diff --git a/public/manifest.json b/public/manifest.json index 080d6c7..6de1ca1 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -1,6 +1,6 @@ { - "short_name": "React App", - "name": "Create React App Sample", + "short_name": "KristWeb", + "name": "KristWeb", "icons": [ { "src": "favicon.ico", @@ -16,10 +16,16 @@ "src": "logo512.png", "type": "image/png", "sizes": "512x512" + }, + { + "src": "maskable512.png", + "type": "image/png", + "sizes": "512x512", + "purpose": "maskable" } ], "start_url": ".", "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" + "theme_color": "#343a56", + "background_color": "#343a56" } diff --git a/public/maskable512.png b/public/maskable512.png new file mode 100644 index 0000000..b89fd90 --- /dev/null +++ b/public/maskable512.png Binary files differ diff --git a/src/App.css b/src/App.css deleted file mode 100644 index 74b5e05..0000000 --- a/src/App.css +++ /dev/null @@ -1,38 +0,0 @@ -.App { - text-align: center; -} - -.App-logo { - height: 40vmin; - pointer-events: none; -} - -@media (prefers-reduced-motion: no-preference) { - .App-logo { - animation: App-logo-spin infinite 20s linear; - } -} - -.App-header { - background-color: #282c34; - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: calc(10px + 2vmin); - color: white; -} - -.App-link { - color: #61dafb; -} - -@keyframes App-logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} diff --git a/src/App.less b/src/App.less new file mode 100644 index 0000000..4b4e392 --- /dev/null +++ b/src/App.less @@ -0,0 +1,6 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +@import "antd/dist/antd.dark.less"; +@import "./style/theme.less"; +@import "./style/components.less"; diff --git a/src/App.test.tsx b/src/App.test.tsx deleted file mode 100644 index 4db7ebc..0000000 --- a/src/App.test.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react'; -import { render } from '@testing-library/react'; -import App from './App'; - -test('renders learn react link', () => { - const { getByText } = render(); - const linkElement = getByText(/learn react/i); - expect(linkElement).toBeInTheDocument(); -}); diff --git a/src/App.tsx b/src/App.tsx index a53698a..80866f8 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,26 +1,59 @@ -import React from 'react'; -import logo from './logo.svg'; -import './App.css'; +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { Suspense } from "react"; +import { BrowserRouter as Router } from "react-router-dom"; -function App() { - return ( -
-
- logo -

- Edit src/App.tsx and save to reload. -

- - Learn React - -
-
- ); +import { Provider } from "react-redux"; +import { initStore } from "./store/init"; + +// Set up localisation +import "./utils/i18n"; + +// FIXME: Apparently the import order of my CSS is important. Who knew! +import "./App.less"; + +import createWorker from "workerize-loader?name=kw-storage-worker.[contenthash:8]!./workers/Storage.worker"; +import * as StorageWorker from "./workers/Storage.worker"; + +import { AppLoading } from "./global/AppLoading"; +import { CheckStatus } from "./pages/CheckStatus"; +import { AppServices } from "./global/AppServices"; +import { WebsocketProvider } from "./global/ws/WebsocketProvider"; +import { LocaleContext } from "./global/LocaleContext"; + +import Debug from "debug"; +const debug = Debug("kristweb:app"); + +export let store: ReturnType; + +function App(): JSX.Element { + debug("whole app is being rendered!"); + + if (!store) { + debug("initialising redux store"); + store = initStore(); + } + + const worker = createWorker(); + console.log(worker); + worker.foo("test") + .then((s: string) => debug("worker said: %s", s)); + + return }> + + + + + + + {/* Services, etc. */} + + + + + + ; } export default App; diff --git a/src/__data__/languages.json b/src/__data__/languages.json new file mode 100644 index 0000000..4a42360 --- /dev/null +++ b/src/__data__/languages.json @@ -0,0 +1,91 @@ +{ + "en": { + "name": "English (GB)", + "country": "GB", + "contributors": [] + }, + "de": { + "name": "German", + "nativeName": "Deutsch", + "country": "de", + "antLocale": "de_DE", + "dayjsLocale": "de", + "timeagoLocale": "de", + "contributors": [ + { + "name": "Lignum", + "url": "https://github.com/Lignum" + } + ] + }, + "fr": { + "name": "French", + "nativeName": "Français", + "country": "fr", + "antLocale": "fr_FR", + "dayjsLocale": "fr", + "timeagoLocale": "fr", + "contributors": [ + { + "name": "Anavrins", + "url": "https://github.com/xAnavrins" + } + ] + }, + "nl": { + "name": "Dutch", + "nativeName": "Nederlands", + "country": "nl", + "antLocale": "nl_NL", + "dayjsLocale": "nl", + "timeagoLocale": "nl", + "contributors": [ + { + "name": "HydroNitrogen", + "url": "https://github.com/Wendelstein7" + } + ] + }, + "pl": { + "name": "Polish", + "nativeName": "Polski", + "country": "pl", + "antLocale": "pl_PL", + "dayjsLocale": "pl", + "timeagoLocale": "pl", + "contributors": [ + { + "name": "Wojbie", + "url": "https://github.com/Wojbie" + } + ] + }, + "pt": { + "name": "Portuguese", + "nativeName": "Português", + "country": "br", + "antLocale": "pt_BR", + "dayjsLocale": "pt-br", + "timeagoLocale": "pt-br", + "contributors": [ + { + "name": "Abigail", + "url": "https://abby.how" + } + ] + }, + "vi": { + "name": "Vietnamese", + "nativeName": "Tiếng Việt", + "country": "vn", + "antLocale": "vi_VN", + "dayjsLocale": "vi", + "timeagoLocale": "vi", + "contributors": [ + { + "name": "Boom", + "url": "https://github.com/signalhunter" + } + ] + } +} diff --git a/src/__data__/verified-addresses.json b/src/__data__/verified-addresses.json new file mode 100644 index 0000000..9ee0d32 --- /dev/null +++ b/src/__data__/verified-addresses.json @@ -0,0 +1,24 @@ +{ + "kqxhx5yn9v": { + "label": "SwitchCraft", + "description": "This address is the master wallet for the SwitchCraft Minecraft server. It represents the balance of all SwitchCraft players.", + "website": "https://switchcraft.pw" + }, + "kitsemmaya": { + "label": "BustAKrist", + "description": "This address holds the bankroll and player balances for BustAKrist, a Krist gambling site.", + "website": "https://bustakrist.its-em.ma" + }, + "ksellshopq": { "label": "Sellshop" }, + "kr08ac3b4o": { "label": "CodersNet", "isActive": false }, + "kyq7arbu73": { "label": "CodersNet", "isActive": false }, + "kek4daddy2": { "label": "KDice", "isActive": false }, + "klemmyturd": { "label": "KFaucet", "isActive": false }, + "knfe7aps4c": { "label": "KFaucet", "isActive": false }, + "kh9w36ea1b": { "label": "KLottery", "isActive": false }, + "klucky7942": { "label": "KLottery", "isActive": false }, + "kmineqokuz": { "label": "KristMiner.cf", "isActive": false }, + "kul2kr8t4l": { "label": "LurCraft", "isActive": false }, + "k5cfswitch": { "label": "SwitchMarket", "isActive": false }, + "k0resoaker": { "label": "Soak Bot", "isActive": false } +} diff --git a/src/__tests__/App.tsx b/src/__tests__/App.tsx new file mode 100644 index 0000000..43cd54f --- /dev/null +++ b/src/__tests__/App.tsx @@ -0,0 +1,12 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { render, screen } from "@testing-library/react"; +import App from "@app"; + +test("renders the app", async () => { + render(); + + const appLayout = await screen.findByTestId("site-app-layout"); + expect(appLayout).toBeInTheDocument(); +}); diff --git a/src/components/ConditionalLink.tsx b/src/components/ConditionalLink.tsx new file mode 100644 index 0000000..c512d46 --- /dev/null +++ b/src/components/ConditionalLink.tsx @@ -0,0 +1,63 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { FC } from "react"; + +import { Link, useRouteMatch } from "react-router-dom"; + +interface Props { + to: string; + condition?: boolean; + + replace?: boolean; + + matchTo?: boolean; + matchPath?: string; + matchExact?: boolean; + matchStrict?: boolean; + matchSensitive?: boolean; +} + +export const ConditionalLink: FC = ({ + to, + condition, + + replace, + + matchTo, + matchPath, + matchExact, + matchStrict, + matchSensitive, + + children, ...props +}): JSX.Element => { + // Disable the link if we're already on that route + const wantsCondition = condition !== undefined; + const wantsMatch = matchTo || !!matchPath; + + const match = useRouteMatch(wantsMatch ? { + path: matchTo && to ? to : matchPath, + exact: matchExact, + strict: matchStrict, + sensitive: matchSensitive + } : {}); + + const active = (!wantsCondition || !!condition) && (!wantsMatch || !match); + + return active && to + ? ( + + {children} + + ) + : ( + + {children} + + ); +}; diff --git a/src/components/CopyInputButton.tsx b/src/components/CopyInputButton.tsx new file mode 100644 index 0000000..5fca915 --- /dev/null +++ b/src/components/CopyInputButton.tsx @@ -0,0 +1,50 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useState } from "react"; +import { Tooltip, Button, ButtonProps, Input } from "antd"; +import { CopyOutlined } from "@ant-design/icons"; + +import { useTranslation } from "react-i18next"; + +type Props = ButtonProps & { + targetInput: React.RefObject; + refocusButton?: boolean; + content?: React.ReactNode; +} + +export function CopyInputButton({ + targetInput, + refocusButton, + content, + ...buttonProps +}: Props): JSX.Element { + const { t } = useTranslation(); + const [showCopied, setShowCopied] = useState(false); + + function copy(e: React.MouseEvent) { + if (!targetInput.current) return; + + // targetInput.current.select(); + targetInput.current.focus({ cursor: "all" }); + document.execCommand("copy"); + + if (refocusButton === undefined || refocusButton) { + e.currentTarget.focus(); + } + + setShowCopied(true); + } + + return { + if (!visible && showCopied) setShowCopied(false); + }} + > + + ; +} diff --git a/src/components/DateTime.less b/src/components/DateTime.less new file mode 100644 index 0000000..80de1e2 --- /dev/null +++ b/src/components/DateTime.less @@ -0,0 +1,18 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +@import (reference) "../App.less"; + +.date-time { + &-secondary, &-secondary a, &-secondary time { + color: @text-color-secondary; + } + + &-small, &-small a, &-small time { + font-size: 90%; + + @media (max-width: @screen-xl) { + font-size: 85%; + } + } +} diff --git a/src/components/DateTime.tsx b/src/components/DateTime.tsx new file mode 100644 index 0000000..b00079d --- /dev/null +++ b/src/components/DateTime.tsx @@ -0,0 +1,86 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useContext } from "react"; +import classNames from "classnames"; +import { Tooltip } from "antd"; + +import { TimeagoFormatterContext } from "@global/LocaleContext"; +import { useBooleanSetting } from "@utils/settings"; + +import dayjs from "dayjs"; +import TimeAgo from "react-timeago"; + +import "./DateTime.less"; + +import Debug from "debug"; +const debug = Debug("kristweb:date-time"); + +interface OwnProps { + date?: Date | string | null; + timeAgo?: boolean; + small?: boolean; + secondary?: boolean; + neverRelative?: boolean; + tooltip?: React.ReactNode | false; +} +type Props = React.HTMLProps & OwnProps; + +const RELATIVE_DATE_THRESHOLD = 1000 * 60 * 60 * 24 * 7; + +export function DateTime({ + date, + timeAgo, + small, + secondary, + neverRelative, + tooltip, + ...props +}: Props): JSX.Element | null { + // Get the locale's formatter + const formatter = useContext(TimeagoFormatterContext); + + const showRelativeDates = useBooleanSetting("showRelativeDates"); + const showNativeDates = useBooleanSetting("showNativeDates"); + + if (!date) return null; + + // Attempt to convert the date, failing safely + let realDate: Date; + try { + realDate = typeof date === "string" ? new Date(date) : date; + // Some browsers don't throw until the date is actually used + realDate.toISOString(); + } catch (err) { + debug("error parsing date %s", date); + console.error(err); + return <>INVALID DATE; + } + + const relative = Date.now() - realDate.getTime(); + const isTimeAgo = timeAgo || (showRelativeDates && !neverRelative && relative < RELATIVE_DATE_THRESHOLD); + + const classes = classNames("date-time", props.className, { + "date-time-timeago": isTimeAgo, + "date-time-small": small, + "date-time-secondary": secondary + }); + + const contents = ( + + {isTimeAgo + ? + : dayjs(realDate).format(showNativeDates + ? "ll LTS" + : "YYYY/MM/DD HH:mm:ss")} + + ); + + return tooltip || tooltip === undefined + ? ( + + {contents} + + ) + : contents; +} diff --git a/src/components/Flag.css b/src/components/Flag.css new file mode 100644 index 0000000..be629f0 --- /dev/null +++ b/src/components/Flag.css @@ -0,0 +1 @@ +span.flag{width:44px;height:30px;display:inline-block}img.flag{width:30px}.flag{background:url(/img/flags_responsive.png) no-repeat;background-size:100%}.flag-ad{background-position:0 .413223%}.flag-ae{background-position:0 .826446%}.flag-af{background-position:0 1.239669%}.flag-ag{background-position:0 1.652893%}.flag-ai{background-position:0 2.066116%}.flag-al{background-position:0 2.479339%}.flag-am{background-position:0 2.892562%}.flag-an{background-position:0 3.305785%}.flag-ao{background-position:0 3.719008%}.flag-aq{background-position:0 4.132231%}.flag-ar{background-position:0 4.545455%}.flag-as{background-position:0 4.958678%}.flag-at{background-position:0 5.371901%}.flag-au{background-position:0 5.785124%}.flag-aw{background-position:0 6.198347%}.flag-az{background-position:0 6.61157%}.flag-ba{background-position:0 7.024793%}.flag-bb{background-position:0 7.438017%}.flag-bd{background-position:0 7.85124%}.flag-be{background-position:0 8.264463%}.flag-bf{background-position:0 8.677686%}.flag-bg{background-position:0 9.090909%}.flag-bh{background-position:0 9.504132%}.flag-bi{background-position:0 9.917355%}.flag-bj{background-position:0 10.330579%}.flag-bm{background-position:0 10.743802%}.flag-bn{background-position:0 11.157025%}.flag-bo{background-position:0 11.570248%}.flag-br{background-position:0 11.983471%}.flag-bs{background-position:0 12.396694%}.flag-bt{background-position:0 12.809917%}.flag-bv{background-position:0 13.22314%}.flag-bw{background-position:0 13.636364%}.flag-by{background-position:0 14.049587%}.flag-bz{background-position:0 14.46281%}.flag-ca{background-position:0 14.876033%}.flag-cc{background-position:0 15.289256%}.flag-cd{background-position:0 15.702479%}.flag-cf{background-position:0 16.115702%}.flag-cg{background-position:0 16.528926%}.flag-ch{background-position:0 16.942149%}.flag-ci{background-position:0 17.355372%}.flag-ck{background-position:0 17.768595%}.flag-cl{background-position:0 18.181818%}.flag-cm{background-position:0 18.595041%}.flag-cn{background-position:0 19.008264%}.flag-co{background-position:0 19.421488%}.flag-cr{background-position:0 19.834711%}.flag-cu{background-position:0 20.247934%}.flag-cv{background-position:0 20.661157%}.flag-cx{background-position:0 21.07438%}.flag-cy{background-position:0 21.487603%}.flag-cz{background-position:0 21.900826%}.flag-de{background-position:0 22.31405%}.flag-dj{background-position:0 22.727273%}.flag-dk{background-position:0 23.140496%}.flag-dm{background-position:0 23.553719%}.flag-do{background-position:0 23.966942%}.flag-dz{background-position:0 24.380165%}.flag-ec{background-position:0 24.793388%}.flag-ee{background-position:0 25.206612%}.flag-eg{background-position:0 25.619835%}.flag-eh{background-position:0 26.033058%}.flag-er{background-position:0 26.446281%}.flag-es{background-position:0 26.859504%}.flag-et{background-position:0 27.272727%}.flag-fi{background-position:0 27.68595%}.flag-fj{background-position:0 28.099174%}.flag-fk{background-position:0 28.512397%}.flag-fm{background-position:0 28.92562%}.flag-fo{background-position:0 29.338843%}.flag-fr{background-position:0 29.752066%}.flag-ga{background-position:0 30.165289%}.flag-gd{background-position:0 30.578512%}.flag-ge{background-position:0 30.991736%}.flag-gf{background-position:0 31.404959%}.flag-gh{background-position:0 31.818182%}.flag-gi{background-position:0 32.231405%}.flag-gl{background-position:0 32.644628%}.flag-gm{background-position:0 33.057851%}.flag-gn{background-position:0 33.471074%}.flag-gp{background-position:0 33.884298%}.flag-gq{background-position:0 34.297521%}.flag-gr{background-position:0 34.710744%}.flag-gs{background-position:0 35.123967%}.flag-gt{background-position:0 35.53719%}.flag-gu{background-position:0 35.950413%}.flag-gw{background-position:0 36.363636%}.flag-gy{background-position:0 36.77686%}.flag-hk{background-position:0 37.190083%}.flag-hm{background-position:0 37.603306%}.flag-hn{background-position:0 38.016529%}.flag-hr{background-position:0 38.429752%}.flag-ht{background-position:0 38.842975%}.flag-hu{background-position:0 39.256198%}.flag-id{background-position:0 39.669421%}.flag-ie{background-position:0 40.082645%}.flag-il{background-position:0 40.495868%}.flag-in{background-position:0 40.909091%}.flag-io{background-position:0 41.322314%}.flag-iq{background-position:0 41.735537%}.flag-ir{background-position:0 42.14876%}.flag-is{background-position:0 42.561983%}.flag-it{background-position:0 42.975207%}.flag-jm{background-position:0 43.38843%}.flag-jo{background-position:0 43.801653%}.flag-jp{background-position:0 44.214876%}.flag-ke{background-position:0 44.628099%}.flag-kg{background-position:0 45.041322%}.flag-kh{background-position:0 45.454545%}.flag-ki{background-position:0 45.867769%}.flag-km{background-position:0 46.280992%}.flag-kn{background-position:0 46.694215%}.flag-kp{background-position:0 47.107438%}.flag-kr{background-position:0 47.520661%}.flag-kw{background-position:0 47.933884%}.flag-ky{background-position:0 48.347107%}.flag-kz{background-position:0 48.760331%}.flag-la{background-position:0 49.173554%}.flag-lb{background-position:0 49.586777%}.flag-lc{background-position:0 50%}.flag-li{background-position:0 50.413223%}.flag-lk{background-position:0 50.826446%}.flag-lr{background-position:0 51.239669%}.flag-ls{background-position:0 51.652893%}.flag-lt{background-position:0 52.066116%}.flag-lu{background-position:0 52.479339%}.flag-lv{background-position:0 52.892562%}.flag-ly{background-position:0 53.305785%}.flag-ma{background-position:0 53.719008%}.flag-mc{background-position:0 54.132231%}.flag-md{background-position:0 54.545455%}.flag-me{background-position:0 54.958678%}.flag-mg{background-position:0 55.371901%}.flag-mh{background-position:0 55.785124%}.flag-mk{background-position:0 56.198347%}.flag-ml{background-position:0 56.61157%}.flag-mm{background-position:0 57.024793%}.flag-mn{background-position:0 57.438017%}.flag-mo{background-position:0 57.85124%}.flag-mp{background-position:0 58.264463%}.flag-mq{background-position:0 58.677686%}.flag-mr{background-position:0 59.090909%}.flag-ms{background-position:0 59.504132%}.flag-mt{background-position:0 59.917355%}.flag-mu{background-position:0 60.330579%}.flag-mv{background-position:0 60.743802%}.flag-mw{background-position:0 61.157025%}.flag-mx{background-position:0 61.570248%}.flag-my{background-position:0 61.983471%}.flag-mz{background-position:0 62.396694%}.flag-na{background-position:0 62.809917%}.flag-nc{background-position:0 63.22314%}.flag-ne{background-position:0 63.636364%}.flag-nf{background-position:0 64.049587%}.flag-ng{background-position:0 64.46281%}.flag-ni{background-position:0 64.876033%}.flag-nl{background-position:0 65.289256%}.flag-no{background-position:0 65.702479%}.flag-np{background-position:0 66.115702%}.flag-nr{background-position:0 66.528926%}.flag-nu{background-position:0 66.942149%}.flag-nz{background-position:0 67.355372%}.flag-om{background-position:0 67.768595%}.flag-pa{background-position:0 68.181818%}.flag-pe{background-position:0 68.595041%}.flag-pf{background-position:0 69.008264%}.flag-pg{background-position:0 69.421488%}.flag-ph{background-position:0 69.834711%}.flag-pk{background-position:0 70.247934%}.flag-pl{background-position:0 70.661157%}.flag-pm{background-position:0 71.07438%}.flag-pn{background-position:0 71.487603%}.flag-pr{background-position:0 71.900826%}.flag-pt{background-position:0 72.31405%}.flag-pw{background-position:0 72.727273%}.flag-py{background-position:0 73.140496%}.flag-qa{background-position:0 73.553719%}.flag-re{background-position:0 73.966942%}.flag-ro{background-position:0 74.380165%}.flag-rs{background-position:0 74.793388%}.flag-ru{background-position:0 75.206612%}.flag-rw{background-position:0 75.619835%}.flag-sa{background-position:0 76.033058%}.flag-sb{background-position:0 76.446281%}.flag-sc{background-position:0 76.859504%}.flag-sd{background-position:0 77.272727%}.flag-se{background-position:0 77.68595%}.flag-sg{background-position:0 78.099174%}.flag-sh{background-position:0 78.512397%}.flag-si{background-position:0 78.92562%}.flag-sj{background-position:0 79.338843%}.flag-sk{background-position:0 79.752066%}.flag-sl{background-position:0 80.165289%}.flag-sm{background-position:0 80.578512%}.flag-sn{background-position:0 80.991736%}.flag-so{background-position:0 81.404959%}.flag-sr{background-position:0 81.818182%}.flag-ss{background-position:0 82.231405%}.flag-st{background-position:0 82.644628%}.flag-sv{background-position:0 83.057851%}.flag-sy{background-position:0 83.471074%}.flag-sz{background-position:0 83.884298%}.flag-tc{background-position:0 84.297521%}.flag-td{background-position:0 84.710744%}.flag-tf{background-position:0 85.123967%}.flag-tg{background-position:0 85.53719%}.flag-th{background-position:0 85.950413%}.flag-tj{background-position:0 86.363636%}.flag-tk{background-position:0 86.77686%}.flag-tl{background-position:0 87.190083%}.flag-tm{background-position:0 87.603306%}.flag-tn{background-position:0 88.016529%}.flag-to{background-position:0 88.429752%}.flag-tp{background-position:0 88.842975%}.flag-tr{background-position:0 89.256198%}.flag-tt{background-position:0 89.669421%}.flag-tv{background-position:0 90.082645%}.flag-tw{background-position:0 90.495868%}.flag-ty{background-position:0 90.909091%}.flag-tz{background-position:0 91.322314%}.flag-ua{background-position:0 91.735537%}.flag-ug{background-position:0 92.14876%}.flag-gb,.flag-uk{background-position:0 92.561983%}.flag-um{background-position:0 92.975207%}.flag-us{background-position:0 93.38843%}.flag-uy{background-position:0 93.801653%}.flag-uz{background-position:0 94.214876%}.flag-va{background-position:0 94.628099%}.flag-vc{background-position:0 95.041322%}.flag-ve{background-position:0 95.454545%}.flag-vg{background-position:0 95.867769%}.flag-vi{background-position:0 96.280992%}.flag-vn{background-position:0 96.694215%}.flag-vu{background-position:0 97.107438%}.flag-wf{background-position:0 97.520661%}.flag-ws{background-position:0 97.933884%}.flag-ye{background-position:0 98.347107%}.flag-za{background-position:0 98.760331%}.flag-zm{background-position:0 99.173554%}.flag-zr{background-position:0 99.586777%}.flag-zw{background-position:0 100%} diff --git a/src/components/Flag.tsx b/src/components/Flag.tsx new file mode 100644 index 0000000..34fa672 --- /dev/null +++ b/src/components/Flag.tsx @@ -0,0 +1,26 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { HTMLProps } from "react"; +import classNames from "classnames"; + +import "./Flag.css"; + +interface Props extends HTMLProps { + name?: string; + code?: string; +} + +export function Flag({ name, code, className, ...rest }: Props): JSX.Element { + const classes = classNames( + "flag", + code ? "flag-" + code.toLowerCase() : "", + className + ); + + return ; +} diff --git a/src/components/HelpIcon.less b/src/components/HelpIcon.less new file mode 100644 index 0000000..e819c38 --- /dev/null +++ b/src/components/HelpIcon.less @@ -0,0 +1,14 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +@import (reference) "../App.less"; + +.kw-help-icon { + display: inline-block; + margin-left: @padding-xs; + + font-size: 90%; + + color: @text-color-secondary; + cursor: pointer; +} diff --git a/src/components/HelpIcon.tsx b/src/components/HelpIcon.tsx new file mode 100644 index 0000000..ae0c7c1 --- /dev/null +++ b/src/components/HelpIcon.tsx @@ -0,0 +1,26 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import classNames from "classnames"; +import { Tooltip } from "antd"; +import { QuestionCircleOutlined } from "@ant-design/icons"; + +import { useTranslation } from "react-i18next"; + +import "./HelpIcon.less"; + +interface Props { + text?: string; + textKey?: string; + className?: string; +} + +export function HelpIcon({ text, textKey, className }: Props): JSX.Element { + const { t } = useTranslation(); + + const classes = classNames("kw-help-icon", className); + + return + + ; +} diff --git a/src/components/OptionalField.less b/src/components/OptionalField.less new file mode 100644 index 0000000..fae29a4 --- /dev/null +++ b/src/components/OptionalField.less @@ -0,0 +1,11 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +@import (reference) "../App.less"; + +.optional-field { + &.optional-field-unset { + color: @text-color-secondary; + font-style: italic; + } +} diff --git a/src/components/OptionalField.tsx b/src/components/OptionalField.tsx new file mode 100644 index 0000000..ecfed07 --- /dev/null +++ b/src/components/OptionalField.tsx @@ -0,0 +1,39 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import classNames from "classnames"; +import { Typography } from "antd"; +import { CopyConfig } from "./types"; + +import { useTranslation } from "react-i18next"; + +import "./OptionalField.less"; + +const { Text } = Typography; + +interface Props { + value?: React.ReactNode | null | undefined; + copyable?: boolean | CopyConfig; + unsetKey?: string; + className?: string; +} + +export function OptionalField({ + value, + copyable, + unsetKey, + className +}: Props): JSX.Element { + const { t } = useTranslation(); + + const unset = value === undefined || value === null; + const classes = classNames("optional-field", className, { + "optional-field-unset": unset + }); + + return + {unset + ? t(unsetKey || "optionalFieldUnset") + : {value}} + ; +} diff --git a/src/components/Statistic.less b/src/components/Statistic.less new file mode 100644 index 0000000..e7c7597 --- /dev/null +++ b/src/components/Statistic.less @@ -0,0 +1,29 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +@import (reference) "../App.less"; + +.kw-statistic { + &-title { + color: @kw-text-secondary; + display: block; + } + + &-value { + font-size: @heading-3-size; + + .ant-typography-copy { + line-height: 1 !important; + margin-left: @padding-xs; + + .anticon { + font-size: @font-size-base; + vertical-align: 0; + } + } + } + + &-green &-value { + color: @kw-green; + } +} diff --git a/src/components/Statistic.tsx b/src/components/Statistic.tsx new file mode 100644 index 0000000..30372b5 --- /dev/null +++ b/src/components/Statistic.tsx @@ -0,0 +1,31 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import classNames from "classnames"; + +import { useTranslation } from "react-i18next"; + +import "./Statistic.less"; + +interface Props { + title?: string; + titleKey?: string; + titleExtra?: React.ReactNode; + value?: React.ReactNode; + + className?: string; + green?: boolean; +} + +export function Statistic({ title, titleKey, titleExtra, value, className, green }: Props): JSX.Element { + const { t } = useTranslation(); + + const classes = classNames("kw-statistic", className, { + "kw-statistic-green": green + }); + + return
+ {titleKey ? t(titleKey) : title}{titleExtra} + {value} +
; +} diff --git a/src/components/addresses/ContextualAddress.less b/src/components/addresses/ContextualAddress.less new file mode 100644 index 0000000..f5c46e5 --- /dev/null +++ b/src/components/addresses/ContextualAddress.less @@ -0,0 +1,53 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +@import (reference) "../../App.less"; + +.contextual-address { + &:not(.contextual-address-allow-wrap) { + .address-metaname, .address-name, .address-raw-metaname, + .address-wallet { + white-space: nowrap; + } + } + + .address-address, .address-original { + white-space: nowrap; + } + + .address-original { + opacity: 0.8; + } + + &.contextual-address-non-existent a { + color: @text-color-secondary; + + cursor: not-allowed; + + text-decoration-line: underline; + text-decoration-style: dotted; + text-decoration-color: @text-color-secondary; + text-decoration-thickness: 1px; + } + + .address-verified { + &:not(.address-verified-inactive) a { + color: fade(@kw-orange, 60%); + + .address-verified-label, .kw-verified-check-icon { + color: @kw-orange; + } + } + + .kw-verified-check-icon { + display: inline-block; + font-size: 80%; + margin-left: 0.25em; + + svg { + position: relative; + top: -1px; + } + } + } +} diff --git a/src/components/addresses/ContextualAddress.tsx b/src/components/addresses/ContextualAddress.tsx new file mode 100644 index 0000000..9c8870a --- /dev/null +++ b/src/components/addresses/ContextualAddress.tsx @@ -0,0 +1,207 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import classNames from "classnames"; +import { Tooltip, Typography } from "antd"; + +import { useTranslation } from "react-i18next"; +import { Link } from "react-router-dom"; + +import { KristAddress } from "@api/types"; +import { Wallet, useWallets } from "@wallets"; +import { Contact, useContacts } from "@contacts"; +import { parseCommonMeta, CommonMeta } from "@utils/commonmeta"; +import { useNameSuffix, stripNameSuffix } from "@utils/currency"; +import { useBooleanSetting } from "@utils/settings"; + +import { KristNameLink } from "../names/KristNameLink"; +import { ConditionalLink } from "@comp/ConditionalLink"; + +import { getVerified, VerifiedAddressLink } from "./VerifiedAddress"; + +import "./ContextualAddress.less"; + +const { Text } = Typography; + +interface Props { + address: KristAddress | string | null; + wallet?: Wallet | false; + contact?: Contact | false; + metadata?: string; + source?: boolean; + hideNameAddress?: boolean; + allowWrap?: boolean; + neverCopyable?: boolean; + nonExistent?: boolean; + className?: string; +} + +export function ContextualAddress({ + address: origAddress, + wallet: origWallet, + contact: origContact, + metadata, + source, + hideNameAddress, + allowWrap, + neverCopyable, + nonExistent, + className +}: Props): JSX.Element { + const { t } = useTranslation(); + const { walletAddressMap } = useWallets(); + const { contactAddressMap } = useContacts(); + const nameSuffix = useNameSuffix(); + const addressCopyButtons = useBooleanSetting("addressCopyButtons"); + + if (!origAddress) return ( + + {t("contextualAddressUnknown")} + + ); + + const address = typeof origAddress === "object" + ? origAddress.address + : origAddress; + + // If we were given a wallet, use it. Otherwise, look it up, unless it was + // explicitly excluded (e.g. the Wallets table) + const wallet = origWallet !== false + ? (origWallet || walletAddressMap[address]) + : undefined; + const contact = origContact !== false + ? (origContact || contactAddressMap[address]) + : undefined; + + const commonMeta = parseCommonMeta(nameSuffix, metadata); + const hasMetaname = source + ? !!commonMeta?.returnRecipient + : !!commonMeta?.recipient; + + const verified = getVerified(address); + + const showTooltip = !verified && + ((hideNameAddress && !!hasMetaname) || !!wallet?.label || !!contact?.label); + + const copyable = !neverCopyable && addressCopyButtons + ? { text: address } : undefined; + + const classes = classNames("contextual-address", className, { + "contextual-address-allow-wrap": allowWrap, + "contextual-address-non-existent": nonExistent + }); + + /** The label of the wallet or contact, or the address itself (not a metaname) */ + function AddressContent(props: any): JSX.Element { + return wallet?.label + ? {wallet.label} + : (contact?.label + ? {contact.label} + : {address}); + } + + return + {/* If the address definitely doesn't exist, show the 'not yet initialised' + * tooltip on hover instead. */} + + {commonMeta && hasMetaname + ? ( + // Display the metaname and link to the name if possible + + ) + : (verified + // Display the verified address if possible + ? + : ( + // Display the regular address or label + + + + ) + ) + } + + {/* This empty child here forces the Tooltip to change its hover + * behaviour. Pretty funky, needs investigating. */} + <> + + ; +} + +interface AddressMetanameProps { + nameSuffix: string; + address: string; + commonMeta: CommonMeta; + source: boolean; + hideNameAddress: boolean; +} + +export function AddressMetaname({ + nameSuffix, + address, + commonMeta, + source, + hideNameAddress +}: AddressMetanameProps): JSX.Element { + const rawMetaname = (source ? commonMeta?.return : commonMeta?.recipient) || undefined; + const name = (source ? commonMeta?.returnName : commonMeta?.name) || undefined; + const nameWithoutSuffix = name ? stripNameSuffix(nameSuffix, name) : undefined; + + const verified = getVerified(address); + + function AddressContent() { + return verified + ? ( + // Verified address + + ) + : ( + // Regular address + + + ({address}) + + + ); + } + + return name + ? <> + {/* Display the name/metaname (e.g. foo@bar.kst) */} + + + {/* Display the original address too */} + {!hideNameAddress && <> +   + } + + : ( + // Display the raw metaname, but link to the owner address + + {rawMetaname} + + ); +} diff --git a/src/components/addresses/VerifiedAddress.tsx b/src/components/addresses/VerifiedAddress.tsx new file mode 100644 index 0000000..452fa53 --- /dev/null +++ b/src/components/addresses/VerifiedAddress.tsx @@ -0,0 +1,118 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import classNames from "classnames"; +import { Row, Col, Card, Tooltip, Button, Typography } from "antd"; +import { GlobalOutlined } from "@ant-design/icons"; + +import { useTranslation } from "react-i18next"; + +import verifiedAddressesJson from "../../__data__/verified-addresses.json"; + +import { ConditionalLink } from "@comp/ConditionalLink"; +import { VerifiedCheck } from "./VerifiedCheck"; + +import Markdown from "markdown-to-jsx"; +import { useMarkdownLink } from "@comp/krist/MarkdownLink"; + +const { Text } = Typography; + +// A verified address is a service that transacts on behalf of its users, or +// holds a balance for its users, and is run by someone we think is trustworthy. + +export interface VerifiedAddress { + label: string; + description?: string; + website?: string; + isActive?: boolean; +} + +export type VerifiedAddresses = Record; +export const verifiedAddresses: VerifiedAddresses = verifiedAddressesJson; + +export const getVerified = (address?: string | null): VerifiedAddress | undefined => + address ? verifiedAddresses[address] : undefined; + +interface Props { + address: string; + verified: VerifiedAddress; + parens?: boolean; + className?: string; +} + +export function VerifiedAddressLink({ + address, + verified, + parens, + className +}: Props): JSX.Element { + const classes = classNames("address-verified", className, { + "address-verified-inactive": verified.isActive === false + }); + + return + + + {parens && <>(} + + {verified.label} + + + {parens && <>)} + + + ; +} + +export function VerifiedDescription({ + verified +}: { verified: VerifiedAddress }): JSX.Element { + const { t } = useTranslation(); + + // Make relative links start with the sync node, and override all links to + // open in a new tab + const MarkdownLink = useMarkdownLink(); + + return + + + {/* Description (markdown) */} + {verified.description &&

+ + {verified.description} + +

} + + {/* Inactive notice */} + {verified.isActive === false &&
+ + {t("address.verifiedInactive")} + +
} + + {/* Website button */} + {verified.website && } +
+ +
; +} diff --git a/src/components/addresses/VerifiedCheck.tsx b/src/components/addresses/VerifiedCheck.tsx new file mode 100644 index 0000000..67eb33c --- /dev/null +++ b/src/components/addresses/VerifiedCheck.tsx @@ -0,0 +1,17 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import classNames from "classnames"; +import Icon from "@ant-design/icons"; + +export const VerifiedCheckSvg = (): JSX.Element => ( + + + +); +export const VerifiedCheck = ({ className, ...props }: any): JSX.Element => + ; diff --git a/src/components/addresses/picker/AddressHint.tsx b/src/components/addresses/picker/AddressHint.tsx new file mode 100644 index 0000000..ff63e51 --- /dev/null +++ b/src/components/addresses/picker/AddressHint.tsx @@ -0,0 +1,33 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useTranslation, Trans } from "react-i18next"; + +import { KristAddressWithNames } from "@api/lookup"; +import { KristValue } from "@comp/krist/KristValue"; + +interface Props { + address?: KristAddressWithNames; + nameHint?: boolean; +} + +export function AddressHint({ address, nameHint }: Props): JSX.Element { + const { t } = useTranslation(); + + return + {nameHint + ? ( + // Show the name count if this picker is relevant to a name transfer + + Balance: {{ names: address?.names || 0 }} + + ) + : ( + // Otherwise, show the balance + + Balance: + + ) + } + ; +} diff --git a/src/components/addresses/picker/AddressPicker.less b/src/components/addresses/picker/AddressPicker.less new file mode 100644 index 0000000..b25e5d9 --- /dev/null +++ b/src/components/addresses/picker/AddressPicker.less @@ -0,0 +1,56 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +@import (reference) "../../../App.less"; + +.address-picker { + margin-bottom: @form-item-margin-bottom; + + .ant-form-item { + margin-bottom: 0; + } +} + +.address-picker-dropdown { + .address-picker-address-item { + display: flex; + flex-direction: row; + align-items: center; + flex-wrap: wrap; + + .krist-value { + flex: 0; + margin-left: auto; + padding-left: @padding-sm; + } + + .address-picker-item-content { + min-width: 0; + flex: 1; + } + + .address-picker-wallet-label, .address-picker-contact-label { + white-space: normal; + word-break: break-word; + } + + .address-picker-wallet-label + .address-picker-wallet-address, + .address-picker-contact-label + .address-picker-contact-address { + color: @text-color-secondary; + } + } +} + +.address-picker-hints { + .address-picker-hint { + // Disallow wrapping within a hint, but still allow the hints themselves to + // be wrapped (see #23) + white-space: nowrap; + word-break: none; + } + + .address-picker-separator { + margin: 0 @padding-xs; + color: @text-color-secondary; + } +} diff --git a/src/components/addresses/picker/AddressPicker.tsx b/src/components/addresses/picker/AddressPicker.tsx new file mode 100644 index 0000000..e73ac2e --- /dev/null +++ b/src/components/addresses/picker/AddressPicker.tsx @@ -0,0 +1,281 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import React, { useMemo, Ref, useEffect } from "react"; +import classNames from "classnames"; +import { AutoComplete, Form, FormInstance } from "antd"; +import { Rule } from "antd/lib/form"; +import { ValidateStatus } from "antd/lib/form/FormItem"; +import { RefSelectProps } from "antd/lib/select"; + +import { useTranslation } from "react-i18next"; + +import { useWallets } from "@wallets"; +import { useContacts } from "@contacts"; +import { + useAddressPrefix, useNameSuffix, + isValidAddress, getNameParts, + getNameRegex, getAddressRegexV2 +} from "@utils/currency"; + +import { getCategoryHeader } from "./Header"; +import { getAddressItem } from "./Item"; +import { getOptions } from "./options"; +import { usePickerHints } from "./PickerHints"; + +import "./AddressPicker.less"; + +interface Props { + form?: FormInstance; + + name: string; + label?: string; + value?: string; + otherPickerValue?: string; + + walletsOnly?: boolean; + noWallets?: boolean; + noNames?: boolean; + nameHint?: boolean; + + validateStatus?: ValidateStatus; + help?: React.ReactNode; + + suppressUpdates?: boolean; + + className?: string; + tabIndex?: number; + inputRef?: Ref; +} + +export function AddressPicker({ + form, + + name, + label, + value, + otherPickerValue, + + walletsOnly, + noWallets, + noNames, + nameHint, + + validateStatus, + help, + + suppressUpdates, + + className, + tabIndex, + inputRef, + ...props +}: Props): JSX.Element { + const { t } = useTranslation(); + + const cleanValue = value?.toLowerCase().trim(); + + // Note that the address picker's options are memoised against the wallets + // (and soon the address book too), but to save on time and expense, the + // 'exact address' match is prepended to these options dynamically. + const { wallets, addressList } = useWallets(); + const { contacts, contactAddressList } = useContacts(); + const options = useMemo(() => getOptions(t, wallets, contacts, noNames), + [t, wallets, contacts, noNames]); + + // Check if the input text is an exact address. If it is, create an extra item + // to prepend to the list. Note that the 'exact address' item is NOT shown if + // the picker wants wallets only, or if the exact address already appears as a + // wallet (or later, an address book entry). + const addressPrefix = useAddressPrefix(); + const hasExactAddress = !!cleanValue + && !walletsOnly + && isValidAddress(addressPrefix, cleanValue) + && !addressList.includes(cleanValue) + && !contactAddressList.includes(cleanValue); + const exactAddressItem = hasExactAddress + ? { + ...getCategoryHeader(t("addressPicker.categoryExactAddress")), + options: [getAddressItem({ address: cleanValue })] + } + : undefined; + + // Check if the input text is an exact name. It may begin with a metaname, but + // must end with the name suffix. + const nameSuffix = useNameSuffix(); + const nameParts = !walletsOnly && !noNames + ? getNameParts(nameSuffix, cleanValue) : undefined; + const hasExactName = !!cleanValue + && !walletsOnly + && !noNames + && !!nameParts?.name; + const exactNameItem = hasExactName + ? { + ...getCategoryHeader(t("addressPicker.categoryExactName")), + options: [getAddressItem({ name: nameParts })] + } + : undefined; + + // Shallow copy the options if we need to prepend anything, otherwise use the + // original memoised array. Prepend the exact address or exact name if they + // are available. + const fullOptions = hasExactAddress || hasExactName + ? [ + ...(exactAddressItem ? [exactAddressItem] : []), + ...(exactNameItem ? [exactNameItem] : []), + ...(!noWallets ? options : []) + ] + : (!noWallets ? options : []); + + // Fetch an address or name hint if possible + const { pickerHints, foundName } = usePickerHints( + nameHint, cleanValue, hasExactName, suppressUpdates + ); + + // Re-validate this field if the picker hints foundName changed + useEffect(() => { + form?.validateFields([name]); + }, [form, name, foundName, otherPickerValue]); + + function getPlaceholder() { + if (walletsOnly) return t("addressPicker.placeholderWalletsOnly"); + if (noWallets) { + if (noNames) return t("addressPicker.placeholderNoWalletsNoNames"); + else return t("addressPicker.placeholderNoWallets"); + } + return t("addressPicker.placeholder"); + } + + const classes = classNames("address-picker", className, { + "address-picker-wallets-only": walletsOnly, + "address-picker-no-wallets": noWallets, + "address-picker-no-names": noNames, + "address-picker-has-exact-address": hasExactAddress, + "address-picker-has-exact-name": hasExactName, + }); + + return
+ { + const addressRegexp = getAddressRegexV2(addressPrefix); + + if (walletsOnly || noNames) { + // Only validate with addresses + if (!addressRegexp.test(value)) { + if (walletsOnly) + throw t("addressPicker.errorInvalidWalletsOnly"); + else throw t("addressPicker.errorInvalidAddressOnly"); + } + } else { + // Validate addresses and names + const nameRegexp = getNameRegex(nameSuffix); + if (!addressRegexp.test(value) && !nameRegexp.test(value)) { + if (noWallets) + throw t("addressPicker.errorInvalidAddress"); + else throw t("addressPicker.errorInvalidRecipient"); + } + } + } + }, + + // If this is walletsOnly, add an additional rule to enforce that the + // given address is a wallet we actually own + ...(walletsOnly ? [{ + type: "enum", + enum: addressList, + message: t("addressPicker.errorInvalidWalletsOnly") + } as Rule] : []), + + // If we have another address picker's value, assert that they are not + // equal (e.g. to/from in a transaction can't be equal) + ...(otherPickerValue ? [{ + async validator(_, value): Promise { + if (value === otherPickerValue) + throw t("addressPicker.errorEqual"); + + // If the value is a name, and we know the name's owner, assert that + // it's not the same as the otherPickerValue as well + if (hasExactName && foundName && foundName.owner === otherPickerValue) + throw t("addressPicker.errorEqual"); + } + } as Rule] : []) + ]} + + {...props} + > + { + // Returning false if the option contains children will allow the + // select to run filterOption for each child of that option group. + if (option?.options) return false; + // TODO: Do we want to filter categories here too? + + const address = option!.value?.toUpperCase(); + const walletLabel = option!["data-wallet-label"]?.toUpperCase(); + const contactLabel = option!["data-contact-label"]?.toUpperCase(); + + // If we have another address picker's value, hide that option from + // the list (it will always be a wallet) + // FIXME: filterOption doesn't get called at all when inputValue is + // blank, which means this option will still appear until the + // user actually starts typing. + if (otherPickerValue?.toUpperCase() === address) + return false; + + // Now that we've filtered out the other picker's value, we can allow + // every other option if there's no input + if (!inputValue) return true; + + const inp = inputValue.toUpperCase(); + + const matchedAddress = address.indexOf(inp) !== -1; + const matchedLabel = walletLabel && walletLabel.indexOf(inp) !== -1; + const matchedContactLabel = contactLabel && contactLabel.indexOf(inp) !== -1; + + return matchedAddress || matchedLabel || matchedContactLabel; + }} + + options={fullOptions} + + tabIndex={tabIndex} + /> + + + {/* Show the address/name hints if they are present */} + {pickerHints} +
; +} + diff --git a/src/components/addresses/picker/Header.tsx b/src/components/addresses/picker/Header.tsx new file mode 100644 index 0000000..c087dac --- /dev/null +++ b/src/components/addresses/picker/Header.tsx @@ -0,0 +1,19 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt + +import { OptionChildren } from "./options"; + +export function getCategoryHeader(category: string): Omit { + return { + label: ( +
+ {category} +
+ ), + + // Will possibly be used for filtering. See OptionValue for a comment on + // the naming of this prop. + "data-picker-category": category + }; +} diff --git a/src/components/addresses/picker/Item.tsx b/src/components/addresses/picker/Item.tsx new file mode 100644 index 0000000..679d0c0 --- /dev/null +++ b/src/components/addresses/picker/Item.tsx @@ -0,0 +1,93 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt + +import { Wallet } from "@wallets"; +import { Contact } from "@contacts"; +import { NameParts } from "@utils/currency"; + +import { KristValue } from "@comp/krist/KristValue"; + +import { OptionValue } from "./options"; + +interface AddressItemProps { + address?: string; + name?: NameParts; + wallet?: Wallet; + contact?: Contact; +} + +function getPlainAddress({ + address, + name, + wallet, + contact +}: AddressItemProps): string { + if (wallet) return wallet.address; + if (contact) return contact.address; + if (name?.recipient) return name.recipient; + else return address || ""; +} + +function PickerContent({ + name, + wallet, + contact, + plainAddress +}: AddressItemProps & { plainAddress: string }): JSX.Element { + if (wallet?.label) { + // Show the wallet label if possible + return <> + {wallet.label}  + ({wallet.address}) + ; + } else if (contact?.label) { + // Show the contact label if possible + return <> + {contact.label}  + ({contact.address}) + ; + } else if (name?.recipient) { + // Show a formatted name if possible + const { metaname, nameWithSuffix } = name; + return <> + {metaname && {metaname}@} + {nameWithSuffix} + ; + } else { + // Just show a plain address + return {plainAddress}; + } +} + +/** Autocompletion option for the address picker. */ +export function getAddressItem(props: AddressItemProps, type?: string): OptionValue { + // The address to use as a value + const plainAddress = getPlainAddress(props); + const { wallet, contact } = props; + + return { + key: `${type || "item"}-${plainAddress}`, + + label: ( +
+ {/* Address, wallet label, contact label, or name */} +
+ +
+ + {/* Wallet balance, if available */} + {wallet && } +
+ ), + + // The wallet label is used for filtering the options + "data-wallet-label": wallet?.label, + "data-contact-label": contact?.label, + // The wallet itself is used for sorting the options + "data-wallet": wallet, + "data-contact": contact, + + value: plainAddress + }; +} diff --git a/src/components/addresses/picker/NameHint.tsx b/src/components/addresses/picker/NameHint.tsx new file mode 100644 index 0000000..2f36cbd --- /dev/null +++ b/src/components/addresses/picker/NameHint.tsx @@ -0,0 +1,29 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { Typography } from "antd"; + +import { useTranslation, Trans } from "react-i18next"; + +import { KristName } from "@api/types"; +import { ContextualAddress } from "@comp/addresses/ContextualAddress"; + +const { Text } = Typography; + +interface Props { + name?: KristName; +} + +export function NameHint({ name }: Props): JSX.Element { + const { t } = useTranslation(); + + return + {name + ? ( + + Owner: + + ) + : {t("addressPicker.nameHintNotFound")}} + ; +} diff --git a/src/components/addresses/picker/PickerHints.tsx b/src/components/addresses/picker/PickerHints.tsx new file mode 100644 index 0000000..c32ba49 --- /dev/null +++ b/src/components/addresses/picker/PickerHints.tsx @@ -0,0 +1,205 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useState, useEffect, useMemo, useRef } from "react"; + +import { + isValidAddress, getNameParts, + useAddressPrefix, useNameSuffix +} from "@utils/currency"; +import { useWallets } from "@wallets"; + +import * as api from "@api"; +import { KristAddressWithNames, lookupAddress } from "@api/lookup"; +import { KristName } from "@api/types"; + +import { WalletHint } from "./WalletHint"; +import { VerifiedHint } from "./VerifiedHint"; +import { AddressHint } from "./AddressHint"; +import { NameHint } from "./NameHint"; + +import { getVerified } from "@comp/addresses/VerifiedAddress"; +import { useSubscription } from "@global/ws/WebsocketSubscription"; + +import { debounce } from "lodash-es"; + +import Debug from "debug"; +const debug = Debug("kristweb:address-picker-hints"); + +const HINT_LOOKUP_DEBOUNCE = 250; + +interface PickerHintsRes { + pickerHints: JSX.Element | null; + foundAddress?: KristAddressWithNames | false; + foundName?: KristName | false; +} + +export function usePickerHints( + nameHint?: boolean, + value?: string, + hasExactName?: boolean, + suppressUpdates?: boolean +): PickerHintsRes { + debug("using picker hints for %s", value); + + // Used for clean-up + const isMounted = useRef(true); + + const addressPrefix = useAddressPrefix(); + const nameSuffix = useNameSuffix(); + + // Handle showing an address or name hint if the value is valid + const [foundAddress, setFoundAddress] = useState(); + const [foundName, setFoundName] = useState(); + + // To auto-refresh address balances, we need to subscribe to the address. + // This is the address to subscribe to: + const [validAddress, setValidAddress] = useState(); + const lastTransactionID = useSubscription({ address: validAddress }); + + // Used to show a wallet hint + const { walletAddressMap, joinedAddressList } = useWallets(); + const foundWallet = validAddress && value + ? walletAddressMap[validAddress] : undefined; + + // Used to show a verified hint + const foundVerified = validAddress ? getVerified(validAddress) : undefined; + + // The actual lookup function (debounced) + const lookupHint = useMemo(() => debounce(async ( + nameSuffix: string, + value: string, + hasAddress?: boolean, + hasName?: boolean, + nameHint?: boolean + ) => { + // Skip doing anything when unmounted to avoid illegal state updates + if (!isMounted.current) return debug("unmounted skipped lookupHint"); + + debug("looking up hint for %s (address: %b) (name: %b)", + value, hasAddress, hasName); + + if (hasAddress) { + // Lookup an address + setFoundName(undefined); + + try { + const address = await lookupAddress(value, nameHint); + + if (!isMounted.current) + return debug("unmounted skipped lookupHint hasAddress try"); + setFoundAddress(address); + } catch (ignored) { + if (!isMounted.current) + return debug("unmounted skipped lookupHint hasAddress catch"); + setFoundAddress(false); + } + } else if (hasName) { + // Lookup a name + setFoundAddress(undefined); + + try { + const nameParts = getNameParts(nameSuffix, value); + const res = await api.get<{ name: KristName }>( + "names/" + encodeURIComponent(nameParts!.name!) + ); + + if (!isMounted.current) + return debug("unmounted skipped lookupHint hasName try"); + setFoundName(res.name); + } catch (ignored) { + if (!isMounted.current) + return debug("unmounted skipped lookupHint hasName catch"); + setFoundName(false); + } + } + }, HINT_LOOKUP_DEBOUNCE), []); + + // Look up the address/name if it is valid (debounced to 250ms) + useEffect(() => { + // Skip doing anything when unmounted to avoid illegal state updates + if (!isMounted.current) return debug("unmounted skipped lookup useEffect"); + if (suppressUpdates) return debug("picker hint lookup check suppressed"); + + if (!value) { + setFoundAddress(undefined); + setFoundName(undefined); + setValidAddress(undefined); + return; + } + + // hasExactAddress fails for walletsOnly, so use this variant instead + const hasValidAddress = !!value + && isValidAddress(addressPrefix, value); + + if (!hasValidAddress && !hasExactName) { + setFoundAddress(undefined); + setFoundName(undefined); + return; + } + + // Update the subscription if necessary + if (hasValidAddress && validAddress !== value) { + debug("updating valid address from %s to %s", validAddress, value); + setValidAddress(value); + } + + // Perform the lookup (debounced) + lookupHint(nameSuffix, value, hasValidAddress, hasExactName, nameHint); + }, [ + lookupHint, nameSuffix, value, addressPrefix, hasExactName, nameHint, + validAddress, lastTransactionID, joinedAddressList, suppressUpdates + ]); + + // Clean up the debounced function when unmounting + useEffect(() => { + isMounted.current = true; + + return () => { + debug("unmounting address picker hint"); + isMounted.current = false; + lookupHint?.cancel(); + }; + }, [lookupHint]); + + // Whether or not to show certain hints/anything at all + const showWalletHint = !!foundWallet; + const showVerifiedHint = !!foundVerified && !showWalletHint; + const showAddressHint = foundAddress !== undefined; + const showNameHint = foundName !== undefined; + const foundAnything = showWalletHint || showVerifiedHint + || showAddressHint || showNameHint; + + // Whether or not to show a separator between the wallet hint and address or + // name hint (i.e. if two hints are shown) + const showSep = (showWalletHint || showVerifiedHint) + && (showAddressHint || showNameHint); + + const pickerHints = foundAnything + ?
+ {/* Show a wallet hint if possible */} + {foundWallet && } + + {/* Show a verified hint if possible */} + {foundVerified && ( + // Make it look like a contextual address to inherit the styles + + + + )} + + {/* Show a separator if there are two hints */} + {showSep && } + + {/* Show an address hint if possible */} + {showAddressHint && ( + + )} + + {/* Show a name hint if possible */} + {showNameHint && } +
+ : null; + + return { pickerHints, foundAddress, foundName }; +} diff --git a/src/components/addresses/picker/VerifiedHint.tsx b/src/components/addresses/picker/VerifiedHint.tsx new file mode 100644 index 0000000..cf13e1b --- /dev/null +++ b/src/components/addresses/picker/VerifiedHint.tsx @@ -0,0 +1,15 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { VerifiedAddress, VerifiedAddressLink } from "@comp/addresses/VerifiedAddress"; + +interface Props { + address: string; + verified: VerifiedAddress; +} + +export function VerifiedHint({ address, verified }: Props): JSX.Element { + return + + ; +} diff --git a/src/components/addresses/picker/WalletHint.tsx b/src/components/addresses/picker/WalletHint.tsx new file mode 100644 index 0000000..4a4da00 --- /dev/null +++ b/src/components/addresses/picker/WalletHint.tsx @@ -0,0 +1,21 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useTranslation, Trans } from "react-i18next"; + +import { Wallet } from "@wallets"; +import { ContextualAddress } from "@comp/addresses/ContextualAddress"; + +interface Props { + wallet: Wallet; +} + +export function WalletHint({ wallet }: Props): JSX.Element { + const { t } = useTranslation(); + + return + + Owner: + + ; +} diff --git a/src/components/addresses/picker/options.ts b/src/components/addresses/picker/options.ts new file mode 100644 index 0000000..aa86678 --- /dev/null +++ b/src/components/addresses/picker/options.ts @@ -0,0 +1,170 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { TFunction } from "react-i18next"; + +import { WalletMap, Wallet } from "@wallets"; +import { ContactMap, Contact } from "@contacts"; + +import { getCategoryHeader } from "./Header"; +import { getAddressItem } from "./Item"; + +import { keyedNullSort } from "@utils"; + +// Ant design's autocomplete/select/rc-select components don't seem to return +// the proper types for these, so just provide our own types that are 'good +// enough'. I have a feeling the AutoComplete/Select components just accept +// basically anything for options, and passes the full objects down as props. +// The documentation on the topic is very limited. +export interface OptionValue { + key: string; + label: React.ReactNode; + + // For some reason, all these props get passed all the way to the DOM element! + // Make this a 'valid' DOM prop + "data-wallet-label"?: string; + "data-contact-label"?: string; + "data-wallet"?: Wallet; + "data-contact"?: Contact; + value: string; +} + +export interface OptionChildren { + label: React.ReactNode; + "data-picker-category": string; + options: OptionValue[]; +} + +export type Option = OptionValue | OptionChildren; + +// ----------------------------------------------------------------------------- +// WALLET OPTIONS +// ----------------------------------------------------------------------------- +interface WalletOptions { + categorised: Record; + uncategorised: OptionValue[]; + contacts: OptionValue[]; + categoryCount: number; +} + +// Sort by balance descending, address ascending. Undefined values are pushed to +// the bottom by using keyedNullSort. Addresses are sorted ascending, though +// because of the implicit reversing behaviour of keyedNullSort, they need to +// be swapped here (i.e. sort with `b`, `a`). +const sortBalance = keyedNullSort<{ balance?: number }>("balance"); +const sortLabel = keyedNullSort<{ label?: string }>("label", true); +const sortAddress = keyedNullSort<{ address: string }>("address", true); + +const sortFn = (a: Wallet, b: Wallet): number => + sortBalance(a, b, "descend") || sortAddress(b, a); +const optionSortFn = (a: OptionValue, b: OptionValue): number => + sortFn(a["data-wallet"]!, b["data-wallet"]!); + +const contactSortFn = (a: Contact, b: Contact): number => + sortLabel(b, a) || sortAddress(b, a); +const contactOptionSortFn = (a: OptionValue, b: OptionValue): number => + contactSortFn(a["data-contact"]!, b["data-contact"]!); + +/** Groups the wallets by category for autocompletion and generates their select + * options. */ +function getWalletOptions( + wallets: WalletMap, + contacts: ContactMap, + noNames?: boolean +): WalletOptions { + const categorised: Record = {}; + const uncategorised: OptionValue[] = []; + + // Go through all wallets and group them + for (const id in wallets) { + const wallet = wallets[id]; + const { category } = wallet; + + // Generate the autocomplete option for this wallet + const item = getAddressItem({ wallet }, "wallet"); + + // Group it by category if possible + if (category) { + if (categorised[category]) categorised[category].push(item); + else categorised[category] = [item]; + } else { + uncategorised.push(item); + } + } + + // Add the contacts too, filtering out names if noNames is set + const contactValues: OptionValue[] = Object.values(contacts) + .filter(c => noNames ? !c.isName : true) + .map(contact => getAddressItem({ contact }, "contact")); + + // Sort the wallets by balance descending, and then by address ascending. + // Since this uses keyedNullSort, which depends on ant-design's implicit + // reversing behaviour, the array is reversed after sorting here. As such, + // undefined balances will be pushed to the bottom. + for (const category in categorised) { + categorised[category].sort(optionSortFn); + categorised[category].reverse(); + } + + uncategorised.sort(optionSortFn); + uncategorised.reverse(); + + contactValues.sort(contactOptionSortFn); + contactValues.reverse(); + + return { + categorised, + uncategorised, + contacts: contactValues, + categoryCount: Object.keys(categorised).length + }; +} + +// ----------------------------------------------------------------------------- +// FULL OPTIONS +// ----------------------------------------------------------------------------- +/** Gets the base options to show for autocompletion, including the wallets, + * grouped by category if possible. Will include the address book soon too. */ +export function getOptions( + t: TFunction, + wallets: WalletMap, + contactMap: ContactMap, + noNames?: boolean +): Option[] { + // Wallet options + const { categorised, uncategorised, categoryCount, contacts } + = getWalletOptions(wallets, contactMap, noNames); + + // Sort the wallet categories in a human-friendly manner + const sortedCategories = Object.keys(categorised); + sortedCategories.sort((a, b) => a.localeCompare(b, undefined, { + sensitivity: "base", + numeric: true + })); + + // Generate the option groups for each category, along with the corresponding + // wallet entries. + const categoryItems = sortedCategories.map(c => ({ + ...getCategoryHeader(c), + options: categorised[c] + })); + + return [ + // Categorised wallets + ...categoryItems, + + // Uncategorised wallets + { + ...getCategoryHeader(categoryCount > 0 + ? t("addressPicker.categoryOtherWallets") + : t("addressPicker.categoryWallets")), + options: uncategorised + }, + + // Address book + { + ...getCategoryHeader(t("addressPicker.categoryAddressBook")), + options: contacts + }, + ]; +} diff --git a/src/components/auth/AuthMasterPasswordPopover.tsx b/src/components/auth/AuthMasterPasswordPopover.tsx new file mode 100644 index 0000000..6fd3eab --- /dev/null +++ b/src/components/auth/AuthMasterPasswordPopover.tsx @@ -0,0 +1,86 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useState, useRef, FC } from "react"; +import { Popover, Button, Input, Form } from "antd"; +import { TooltipPlacement } from "antd/lib/tooltip"; + +import { useTranslation } from "react-i18next"; +import { translateError } from "@utils/i18n"; + +import { FakeUsernameInput } from "./FakeUsernameInput"; +import { getMasterPasswordInput } from "./MasterPasswordInput"; + +import { authMasterPassword, useMasterPassword } from "@wallets"; + +interface FormValues { + masterPassword: string; +} + +interface Props { + encrypt?: boolean; + onSubmit: () => void; + placement?: TooltipPlacement; +} + +export const AuthMasterPasswordPopover: FC = ({ encrypt, onSubmit, placement, children }) => { + const { salt, tester } = useMasterPassword(); + + const { t } = useTranslation(); + const [form] = Form.useForm(); + const [passwordError, setPasswordError] = useState(); + const inputRef = useRef(null); + + async function onFinish(values: FormValues) { + try { + await authMasterPassword(salt, tester, values.masterPassword); + onSubmit(); + } catch (err) { + setPasswordError(translateError(t, err, "masterPassword.errorUnknown")); + } + } + + return { + if (visible) setTimeout(() => { if (inputRef.current) inputRef.current.focus(); }, 20); + }} + content={<> +

{t(encrypt ? "masterPassword.popoverDescriptionEncrypt" : "masterPassword.popoverDescription")}

+ +
+ + + {/* Password input */} + + {getMasterPasswordInput({ inputRef, placeholder: t("masterPassword.passwordPlaceholder"), autoFocus: true })} + + + + + } + > + {children} +
; +}; diff --git a/src/components/auth/AuthorisedAction.less b/src/components/auth/AuthorisedAction.less new file mode 100644 index 0000000..72eeb83 --- /dev/null +++ b/src/components/auth/AuthorisedAction.less @@ -0,0 +1,12 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +.authorised-action-popover { + width: 320px; + + .ant-btn { + display: block; + margin-left: auto; + margin-top: 12px; + } +} diff --git a/src/components/auth/AuthorisedAction.tsx b/src/components/auth/AuthorisedAction.tsx new file mode 100644 index 0000000..ac21f39 --- /dev/null +++ b/src/components/auth/AuthorisedAction.tsx @@ -0,0 +1,83 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import React, { FC, useState } from "react"; +import { TooltipPlacement } from "antd/lib/tooltip"; + +import { useMasterPassword } from "@wallets"; + +import { AuthMasterPasswordPopover } from "./AuthMasterPasswordPopover"; +import { SetMasterPasswordModal } from "./SetMasterPasswordModal"; + +import "./AuthorisedAction.less"; + +import Debug from "debug"; +const debug = Debug("kristweb:authorised-action"); + +interface Props { + encrypt?: boolean; + onAuthed?: () => void; + popoverPlacement?: TooltipPlacement; + children: React.ReactNode; +} + +export const AuthorisedAction: FC = ({ encrypt, onAuthed, popoverPlacement, children }) => { + const { isAuthed, hasMasterPassword } = useMasterPassword(); + + // Don't render the modal and popover unless we absolutely have to + const [clicked, setClicked] = useState(false); + const [modalVisible, setModalVisible] = useState(false); + + // This is used to pass the 'onClick' prop down to the child. The child MUST + // support the onClick prop. + // NOTE: If the child is a custom component, make sure it passes `...props` + // down to its child. + // TODO: Support multiple children? + const child = React.Children.only(children) as React.ReactElement; + + if (isAuthed) { + // The user is authed with their master password, just perform the action + // directly: + return React.cloneElement(child, { onClick: (e: MouseEvent) => { + e.preventDefault(); + debug("authorised action occurred: was already authed"); + + if (onAuthed) onAuthed(); + }}); + } else if (!hasMasterPassword) { + // The user does not yet have a master password, prompt them to create one: + return <> + {React.cloneElement(child, { onClick: (e: MouseEvent) => { + e.preventDefault(); + debug("authorised action postponed: no master password set"); + + if (!clicked) setClicked(true); + setModalVisible(true); + }})} + + {clicked && setModalVisible(false)} + onSubmit={() => { + debug("authorised action occurred: master password now set, continuing with action"); + + setModalVisible(false); + if (onAuthed) onAuthed(); + }} + />} + ; + } else { + // The user has a master password set but is not logged in, prompt them to + // enter it: + return { + debug("authorised action occurred: master password provided"); + if (onAuthed) onAuthed(); + }} + placement={popoverPlacement} + > + {children} + ; + } +}; diff --git a/src/components/auth/FakeUsernameInput.tsx b/src/components/auth/FakeUsernameInput.tsx new file mode 100644 index 0000000..557dafe --- /dev/null +++ b/src/components/auth/FakeUsernameInput.tsx @@ -0,0 +1,14 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { Input } from "antd"; + +/// Fake username field for master password inputs, to trick autofill. +export function FakeUsernameInput(): JSX.Element { + return ; +} diff --git a/src/components/auth/MasterPasswordInput.tsx b/src/components/auth/MasterPasswordInput.tsx new file mode 100644 index 0000000..e2b887e --- /dev/null +++ b/src/components/auth/MasterPasswordInput.tsx @@ -0,0 +1,22 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { Input } from "antd"; + +interface Props { + inputRef?: React.Ref; + placeholder: string; + tabIndex?: number; + autoFocus?: boolean; +} + +export function getMasterPasswordInput({ inputRef, placeholder, tabIndex, autoFocus }: Props): JSX.Element { + return ; +} diff --git a/src/components/auth/SetMasterPasswordModal.tsx b/src/components/auth/SetMasterPasswordModal.tsx new file mode 100644 index 0000000..19a7e66 --- /dev/null +++ b/src/components/auth/SetMasterPasswordModal.tsx @@ -0,0 +1,95 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useRef } from "react"; +import { Modal, Form, Input, Button } from "antd"; +import { useTranslation, Trans } from "react-i18next"; + +import { FakeUsernameInput } from "./FakeUsernameInput"; +import { getMasterPasswordInput } from "./MasterPasswordInput"; + +import { setMasterPassword } from "@wallets"; + +interface Props { + visible: boolean; + onCancel: () => void; + onSubmit: () => void; +} + +export function SetMasterPasswordModal({ visible, onCancel, onSubmit }: Props): JSX.Element { + const { t } = useTranslation(); + const [form] = Form.useForm(); + const inputRef = useRef(null); + + async function onFinish() { + const values = await form.validateFields(); + form.resetFields(); + + await setMasterPassword(values.masterPassword); + + onSubmit(); + } + + return { form.resetFields(); onCancel(); }} + onOk={onFinish} + > +

+ + Enter a master password to encrypt your wallet privatekeys. They + will be saved in your browser's local storage, and you will be + asked for the master password to decrypt them once per session. + +

+ +
+ + + {/* Password input */} + + {getMasterPasswordInput({ inputRef, placeholder: t("masterPassword.passwordPlaceholder"), autoFocus: true })} + + + {/* Password confirm input */} + ({ + validator(_, value) { + if (!value || getFieldValue("masterPassword") === value) + return Promise.resolve(); + return Promise.reject(t("masterPassword.errorPasswordInequal")); + } + }) + ]} + style={{ marginBottom: 0 }} + > + {getMasterPasswordInput({ placeholder: t("masterPassword.passwordConfirmPlaceholder"), tabIndex: 2 })} + + + {/* Ghost submit button to make 'enter' work */} + + + ); + } else if (type === "names") { + return ( + // Network names + + + + ); + } else { + return null; + } +} + +function getSubTitleKey(type?: ResultType): string { + switch (type) { + case "sendTransaction": + return "noWalletsResult.subTitleSendTransaction"; + default: + return "noWalletsResult.subTitle"; + } +} + +export function NoWalletsResult({ type, className }: Props): JSX.Element { + const { t } = useTranslation(); + + const classes = classNames("kw-no-wallets-result", className); + + return } + + title={t("noWalletsResult.title")} + subTitle={t(getSubTitleKey(type))} + extra={<> + {/* Other helpful buttons (e.g. 'Network transactions') */} + {} + + {/* 'Add wallets' button that links to the 'My wallets' page */} + + + + } + + fullPage + />; +} + +interface ModalProps extends Props { + visible?: boolean; + setVisible?: Dispatch>; +} + +export function NoWalletsModal({ + type, + className, + visible, + setVisible +}: ModalProps): JSX.Element { + const { t } = useTranslation(); + const history = useHistory(); + + const classes = classNames("kw-no-wallets-modal", className); + + return { + setVisible?.(false); + history.push("/wallets"); + }} + okText={t("noWalletsResult.button")} + + onCancel={() => setVisible?.(false)} + cancelText={t("dialog.cancel")} + > + {t(getSubTitleKey(type))} + ; +} diff --git a/src/components/results/SmallResult.tsx b/src/components/results/SmallResult.tsx new file mode 100644 index 0000000..2838485 --- /dev/null +++ b/src/components/results/SmallResult.tsx @@ -0,0 +1,70 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt + +/** This is ant-design's Result component, but without importing 54 kB of + * images that we don't even use */ + +import React from "react"; +import classNames from "classnames"; + +import CheckCircleFilled from "@ant-design/icons/CheckCircleFilled"; +import CloseCircleFilled from "@ant-design/icons/CloseCircleFilled"; +import ExclamationCircleFilled from "@ant-design/icons/ExclamationCircleFilled"; +import WarningFilled from "@ant-design/icons/WarningFilled"; + +export const IconMap = { + success: CheckCircleFilled, + error: CloseCircleFilled, + info: ExclamationCircleFilled, + warning: WarningFilled, +}; +export type ResultStatusType = keyof typeof IconMap; + +export interface ResultProps { + icon?: React.ReactNode; + status?: ResultStatusType; + title?: React.ReactNode; + subTitle?: React.ReactNode; + extra?: React.ReactNode; + className?: string; + style?: React.CSSProperties; + fullPage?: boolean; +} + +/** + * Render icon if ExceptionStatus includes ,render svg image else render iconNode + */ +const renderIcon = ({ status, icon }: ResultProps) => { + const iconNode = React.createElement(IconMap[status as ResultStatusType],); + return
{icon || iconNode}
; +}; + +const renderExtra = ({ extra }: ResultProps) => + extra &&
{extra}
; + +export const SmallResult: React.FC = ({ + className: customizeClassName, + subTitle, + title, + style, + children, + status = "info", + icon, + extra, + fullPage, +}) => { + const classes = classNames("ant-result", "ant-result-" + status, customizeClassName, { + "full-page-result": fullPage + }); + + return ( +
+ {renderIcon({ status, icon })} +
{title}
+ {subTitle &&
{subTitle}
} + {renderExtra({ extra })} + {children &&
{children}
} +
+ ); +}; diff --git a/src/components/transactions/SendTransactionModalLink.tsx b/src/components/transactions/SendTransactionModalLink.tsx new file mode 100644 index 0000000..6b4e7bf --- /dev/null +++ b/src/components/transactions/SendTransactionModalLink.tsx @@ -0,0 +1,36 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { FC, useState } from "react"; + +import { AuthorisedAction } from "@comp/auth/AuthorisedAction"; +import { SendTransactionModal } from "@pages/transactions/send/SendTransactionModal"; + +import { Wallet } from "@wallets"; + +interface Props { + from?: Wallet | string; + to?: string; +} + +export const SendTransactionModalLink: FC = ({ + from, + to, + children +}): JSX.Element => { + const [modalVisible, setModalVisible] = useState(false); + + return <> + setModalVisible(true)}> + {children} + + + + ; +}; diff --git a/src/components/transactions/TransactionConciseMetadata.less b/src/components/transactions/TransactionConciseMetadata.less new file mode 100644 index 0000000..24288a8 --- /dev/null +++ b/src/components/transactions/TransactionConciseMetadata.less @@ -0,0 +1,16 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +@import (reference) "../../App.less"; + +.transaction-concise-metadata { + color: @kw-text-tertiary; + font-family: monospace; + font-size: 85%; + + &-truncated::after { + content: "\2026"; + color: @text-color-secondary; + user-select: none; + } +} diff --git a/src/components/transactions/TransactionConciseMetadata.tsx b/src/components/transactions/TransactionConciseMetadata.tsx new file mode 100644 index 0000000..4f7bf0f --- /dev/null +++ b/src/components/transactions/TransactionConciseMetadata.tsx @@ -0,0 +1,44 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import classNames from "classnames"; + +import { KristTransaction } from "@api/types"; +import { useNameSuffix, stripNameFromMetadata } from "@utils/currency"; + +import "./TransactionConciseMetadata.less"; + +interface Props { + transaction?: KristTransaction; + metadata?: string; + limit?: number; + className?: string; +} + +/** + * Trims the name and metaname from the start of metadata, and truncates it + * to a specified amount of characters. + */ +export function TransactionConciseMetadata({ transaction, metadata, limit = 30, className }: Props): JSX.Element | null { + const nameSuffix = useNameSuffix(); + + // Don't render anything if there's no metadata (after the hooks) + const meta = metadata || transaction?.metadata; + if (!meta) return null; + + // Strip the name from the start of the transaction metadata, if it is present + const hasName = transaction && (transaction.sent_name || transaction.sent_metaname); + const withoutName = hasName + ? stripNameFromMetadata(nameSuffix, meta) + : meta; + + // Trim it down to the limit if necessary + const wasTruncated = withoutName.length > limit; + const truncated = wasTruncated ? withoutName.substr(0, limit) : withoutName; + + const classes = classNames("transaction-concise-metadata", className, { + "transaction-concise-metadata-truncated": wasTruncated + }); + + return {truncated}; +} diff --git a/src/components/transactions/TransactionItem.tsx b/src/components/transactions/TransactionItem.tsx new file mode 100644 index 0000000..ef0e4fd --- /dev/null +++ b/src/components/transactions/TransactionItem.tsx @@ -0,0 +1,142 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import classNames from "classnames"; +import { Row, Col, Tooltip, Grid } from "antd"; + +import { useTranslation, Trans } from "react-i18next"; +import { Link } from "react-router-dom"; + +import { KristTransaction } from "@api/types"; +import { WalletAddressMap } from "@wallets"; +import { DateTime } from "../DateTime"; +import { KristValue } from "../krist/KristValue"; +import { KristNameLink } from "../names/KristNameLink"; +import { ContextualAddress } from "../addresses/ContextualAddress"; +import { getTransactionType, TransactionType, INTERNAL_TYPES_SHOW_VALUE } from "./TransactionType"; + +const MAX_A_LENGTH = 24; + +interface Props { + transaction: KristTransaction; + + /** [address]: Wallet */ + wallets: WalletAddressMap; +} + +export function TransactionARecord({ metadata }: { metadata: string | undefined | null }): JSX.Element { + const { t } = useTranslation(); + + return metadata + ? + + {metadata.length > MAX_A_LENGTH + ? <>{metadata.substring(0, MAX_A_LENGTH)}… + : metadata} + + + : ( + + {t("transactionSummary.itemARecordRemoved")} + + ); +} + +export function TransactionItem({ transaction: tx, wallets }: Props): JSX.Element { + const { t } = useTranslation(); + const bps = Grid.useBreakpoint(); + + // Whether or not the from/to addresses are a wallet we own + const fromWallet = tx.from ? wallets[tx.from] : undefined; + const toWallet = tx.to ? wallets[tx.to] : undefined; + + const type = getTransactionType(tx, fromWallet, toWallet); + + const txTime = new Date(tx.time); + const isNew = (new Date().getTime() - txTime.getTime()) < 360000; + + const txLink = "/network/transactions/" + encodeURIComponent(tx.id); + + const hideNameAddress = !bps.xl; + + const classes = classNames("card-list-item", "transaction-summary-item", { + "new": isNew + }); + + return + + {/* Transaction type and link to transaction */} + + + + + {/* Transaction time */} + + + + + + + {/* Transaction name */} + {(type === "name_a_record" || type === "name_purchased") && ( + + Name: + + + )} + + {/* Transaction A record */} + {type === "name_a_record" && ( + + A record: + + + )} + + {/* Transaction to */} + {type !== "name_a_record" && ( + + To: + {type === "name_purchased" + ? + : } + + )} + + {/* Transaction from */} + {type !== "name_a_record" && type !== "name_purchased" && type !== "mined" && ( + + From: + + + )} + + + + {INTERNAL_TYPES_SHOW_VALUE.includes(type) + ? ( + // Transaction value + + ) + : tx.type === "name_transfer" && ( + // Transaction name + + )} + + ; +} diff --git a/src/components/transactions/TransactionSummary.less b/src/components/transactions/TransactionSummary.less new file mode 100644 index 0000000..7224972 --- /dev/null +++ b/src/components/transactions/TransactionSummary.less @@ -0,0 +1,67 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +@import (reference) "../../App.less"; + +.transaction-summary-item { + flex-flow: nowrap; + + .transaction-left { + display: flex; + flex-direction: column; + justify-content: center; + + .transaction-time { + color: @text-color-secondary; + font-size: 90%; + + @media (max-width: @screen-xl) { + font-size: 85%; + } + } + } + + .transaction-middle { + flex: 1; + + display: flex; + flex-direction: column; + justify-content: center; + + overflow: hidden; + + .transaction-field { + font-weight: bold; + white-space: nowrap; + color: @text-color-secondary; + } + + .transaction-a-record-value { + font-family: monospace; + font-size: 90%; + color: @text-color-secondary; + } + + .transaction-a-record-removed { + font-style: italic; + font-size: 90%; + color: @text-color-secondary; + + white-space: nowrap; + text-overflow: ellipsis; + } + } + + .transaction-right { + flex: 0; + font-size: @font-size-lg; + + display: flex; + justify-content: center; + align-items: center; + + .transaction-name { + font-weight: bold; + } + } +} diff --git a/src/components/transactions/TransactionSummary.tsx b/src/components/transactions/TransactionSummary.tsx new file mode 100644 index 0000000..c9b4108 --- /dev/null +++ b/src/components/transactions/TransactionSummary.tsx @@ -0,0 +1,43 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { Row } from "antd"; + +import { useTranslation } from "react-i18next"; +import { Link } from "react-router-dom"; + +import { useWallets } from "@wallets"; + +import { KristTransaction } from "@api/types"; +import { TransactionItem } from "./TransactionItem"; + +import "./TransactionSummary.less"; + +interface Props { + transactions?: KristTransaction[]; + + seeMoreCount?: number; + seeMoreKey?: string; + seeMoreLink?: string; +} + +export function TransactionSummary({ transactions, seeMoreCount, seeMoreKey, seeMoreLink }: Props): JSX.Element { + const { t } = useTranslation(); + const { walletAddressMap } = useWallets(); + + return <> + {transactions && transactions.map(t => ( + + ))} + + {seeMoreCount !== undefined && + + {t(seeMoreKey || "transactionSummary.seeMore", { count: seeMoreCount })} + + } + ; +} diff --git a/src/components/transactions/TransactionType.less b/src/components/transactions/TransactionType.less new file mode 100644 index 0000000..10a467d --- /dev/null +++ b/src/components/transactions/TransactionType.less @@ -0,0 +1,27 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +@import (reference) "../../App.less"; + +.transaction-type { + a { + user-select: none; + + font-weight: bold; + color: @text-color-secondary; + } + + &-transferred a, &-name_transferred a { color: @kw-primary; } + &-sent a, &-name_sent a, &-name_purchased a { color: @kw-orange; } + &-received a, &-mined a, &-name_received a { color: @kw-green; } + &-name_a_record a { color: @kw-purple; } + &-bumped a { color: @kw-text-tertiary; } + + &-no-link a { + cursor: default; + } + + @media (max-width: @screen-xl) { + font-size: 90%; + } +} diff --git a/src/components/transactions/TransactionType.tsx b/src/components/transactions/TransactionType.tsx new file mode 100644 index 0000000..1a50597 --- /dev/null +++ b/src/components/transactions/TransactionType.tsx @@ -0,0 +1,80 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import classNames from "classnames"; + +import { useTranslation } from "react-i18next"; +import { Link } from "react-router-dom"; + +import { KristTransaction, KristTransactionType } from "@api/types"; +import { Wallet, useWallets } from "@wallets"; + +import "./TransactionType.less"; + +export type InternalTransactionType = "transferred" | "sent" | "received" | "mined" | + "name_a_record" | "name_transferred" | "name_sent" | "name_received" | + "name_purchased" | "bumped" | "unknown"; +export const INTERNAL_TYPES_SHOW_VALUE: InternalTransactionType[] = [ + "transferred", "sent", "received", "mined", "name_purchased", "bumped" +]; + +export const TYPES_SHOW_VALUE: KristTransactionType[] = [ + "transfer", "mined", "name_purchase" +]; + +export function getTransactionType(tx: KristTransaction, from?: Wallet, to?: Wallet): InternalTransactionType { + switch (tx.type) { + case "transfer": + if (tx.from && tx.to && tx.from === tx.to) return "bumped"; + if (from && to) return "transferred"; + if (from) return "sent"; + if (to) return "received"; + return "transferred"; + + case "name_transfer": + if (from && to) return "name_transferred"; + if (from) return "name_sent"; + if (to) return "name_received"; + return "name_transferred"; + + case "name_a_record": return "name_a_record"; + case "name_purchase": return "name_purchased"; + + case "mined": return "mined"; + + default: return "unknown"; + } +} + +interface OwnProps { + type?: InternalTransactionType; + transaction?: KristTransaction; + from?: Wallet; + to?: Wallet; + link?: string; +} +type Props = React.HTMLProps & OwnProps; + +export function TransactionType({ type, transaction, from, to, link, className }: Props): JSX.Element { + const { t } = useTranslation(); + const { walletAddressMap } = useWallets(); + + // If we weren't already given the wallets (and we need them to calculate the + // type), get them + const fromWallet = !type && transaction?.from ? (from || walletAddressMap[transaction.from]) : undefined; + const toWallet = !type && transaction?.to ? (to || walletAddressMap[transaction.to]) : undefined; + + // If we weren't already given the type, calculate it + const finalType = type || (transaction ? getTransactionType(transaction, fromWallet, toWallet) : "unknown"); + + const contents = t("transactions.types." + finalType); + const classes = classNames("transaction-type", "transaction-type-" + finalType, className, { + "transaction-type-no-link": !link + }); + + return + {link + ? {contents} + : {contents}} + ; +} diff --git a/src/components/types.ts b/src/components/types.ts new file mode 100644 index 0000000..2a7162e --- /dev/null +++ b/src/components/types.ts @@ -0,0 +1,11 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt + +/** CopyConfig from ant-design (antd/lib/typography/Base.d.ts) */ +export interface CopyConfig { + text?: string; + onCopy?: () => void; + icon?: React.ReactNode; + tooltips?: boolean | React.ReactNode; +} diff --git a/src/components/wallets/SelectWalletCategory.tsx b/src/components/wallets/SelectWalletCategory.tsx new file mode 100644 index 0000000..dff1f40 --- /dev/null +++ b/src/components/wallets/SelectWalletCategory.tsx @@ -0,0 +1,132 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { FC, useState, useMemo } from "react"; +import { Select, Input, Button, Typography, Divider } from "antd"; +import { PlusOutlined } from "@ant-design/icons"; + +import { useTranslation } from "react-i18next"; + +import { localeSort } from "@utils"; +import { useWallets } from "@wallets"; + +const { Text } = Typography; + +interface Props { + onNewCategory?: (name: string) => void; +} + +export const SelectWalletCategory: FC = ({ onNewCategory, ...props }): JSX.Element => { + const { t } = useTranslation(); + const [customCategory, setCustomCategory] = useState(); + + // Required to fetch existing categories + const { wallets } = useWallets(); + const categories = useMemo(() => { + // Get all the non-empty wallet categories and deduplicate them + const categorySet = new Set(Object.values(wallets) + .filter(w => w.category !== undefined && w.category !== "") + .map(w => w.category) as string[]); + + // Add the custom category, if it exists, to our set of categories + if (customCategory) categorySet.add(customCategory); + + // Convert the categories to an array and sort in a human-readable manner + const cats = [...categorySet]; + localeSort(cats); + return cats; + }, [wallets, customCategory]); + + /** Adds a category. Returns whether or not the category input should be + * wiped (i.e. whether or not it was added successfully). */ + function addCategory(input?: string): boolean { + // Ignore invalid category names. Don't wipe the input. + const categoryName = input?.trim(); + if (!categoryName + || categoryName.length > 32 + || categories.includes(categoryName)) + return false; + + setCustomCategory(categoryName); + + // FIXME: hitting enter will _sometimes_ not set the right category name on + // the form + if (onNewCategory) onNewCategory(categoryName); + + return true; + } + + return ; +}; + +interface AddCategoryInputProps { + addCategory: (input: string | undefined) => boolean; +} + +/** The textbox/button to input and add a new category. */ +function AddCategoryInput({ addCategory }: AddCategoryInputProps): JSX.Element { + const { t } = useTranslation(); + const [input, setInput] = useState(); + + return ( +
+ + setInput(e.target.value)} + onPressEnter={e => { + e.preventDefault(); + + // Wipe the input if the category was added successfully + if (addCategory(input)) setInput(undefined); + }} + + placeholder={t("addWallet.walletCategoryDropdownNewPlaceholder")} + + size="small" + style={{ flex: 1, height: 24 }} + /> + + + +
+ ); +} diff --git a/src/components/wallets/SelectWalletFormat.tsx b/src/components/wallets/SelectWalletFormat.tsx new file mode 100644 index 0000000..b74b880 --- /dev/null +++ b/src/components/wallets/SelectWalletFormat.tsx @@ -0,0 +1,30 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { Select } from "antd"; + +import { useTranslation } from "react-i18next"; + +import { WalletFormatName, ADVANCED_FORMATS } from "@wallets"; +import { useBooleanSetting } from "@utils/settings"; + +interface Props { + initialFormat: WalletFormatName; +} + +export function SelectWalletFormat({ initialFormat }: Props): JSX.Element { + const advancedWalletFormats = useBooleanSetting("walletFormats"); + const { t } = useTranslation(); + + return ; +} diff --git a/src/components/wallets/SyncWallets.tsx b/src/components/wallets/SyncWallets.tsx new file mode 100644 index 0000000..5a85511 --- /dev/null +++ b/src/components/wallets/SyncWallets.tsx @@ -0,0 +1,52 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useEffect } from "react"; +import { message, notification } from "antd"; + +import { useSelector } from "react-redux"; +import { RootState } from "@store"; +import { useTranslation } from "react-i18next"; + +import { syncWallets, useWallets, ADDRESS_LIST_LIMIT } from "@wallets"; + +import Debug from "debug"; +const debug = Debug("kristweb:sync-wallets"); + +/** Sync the wallets with the Krist node when connected. */ +export function SyncWallets(): JSX.Element | null { + const { t } = useTranslation(); + + const connectionState = useSelector((s: RootState) => s.websocket.connectionState); + + // When the websocket connects (usually just on startup), perform the initial + // sync. This replaces `WebsocketConnection.refreshBalances`. + useEffect(() => { + if (connectionState !== "connected") return; + debug("syncing wallets (ws is %s)", connectionState); + syncWallets() + .then(() => debug("synced")) + .catch(err => { + console.error(err); + notification.error({ + message: t("syncWallets.errorMessage"), + description: t("syncWallets.errorDescription"), + }); + }); + }, [t, connectionState]); + + // This is an appropriate place to perform the wallet limit check too. Warn + // the user if they have more wallets than ADDRESS_LIST_LIMIT; bypassing this + // limit will generally result in issues with syncing/fetching. + const { addressList } = useWallets(); + useEffect(() => { + if (addressList.length > ADDRESS_LIST_LIMIT) { + message.warning({ + content: t("walletLimitMessage"), + style: { maxWidth: 512, marginLeft: "auto", marginRight: "auto" } + }); + } + }, [t, addressList.length]); + + return null; +} diff --git a/src/global/AppHotkeys.tsx b/src/global/AppHotkeys.tsx new file mode 100644 index 0000000..34f01b5 --- /dev/null +++ b/src/global/AppHotkeys.tsx @@ -0,0 +1,17 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt + +import { useHistory } from "react-router-dom"; +import { GlobalHotKeys } from "react-hotkeys"; + +export function AppHotkeys(): JSX.Element { + const history = useHistory(); + + return history.push("/dev") + }} + />; +} diff --git a/src/global/AppLoading.tsx b/src/global/AppLoading.tsx new file mode 100644 index 0000000..674957d --- /dev/null +++ b/src/global/AppLoading.tsx @@ -0,0 +1,15 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt + +export function AppLoading(): JSX.Element { + return
+ {/* Spinner */} +
+ + {/* Loading hint */} + {/* NOTE: This is not translated, as usually this component is shown when + the translations are being loaded! */} + setsetstsetsetestLoading KristWeb... +
; +} diff --git a/src/global/AppRouter.tsx b/src/global/AppRouter.tsx new file mode 100644 index 0000000..407fa23 --- /dev/null +++ b/src/global/AppRouter.tsx @@ -0,0 +1,110 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { Alert } from "antd"; + +import { Switch, Route } from "react-router-dom"; + +import { DashboardPage } from "@pages/dashboard/DashboardPage"; +import { WalletsPage } from "@pages/wallets/WalletsPage"; +import { ContactsPage } from "@pages/contacts/ContactsPage"; + +import { SendTransactionPage } from "@pages/transactions/send/SendTransactionPage"; + +import { AddressPage } from "@pages/addresses/AddressPage"; +import { BlocksPage } from "@pages/blocks/BlocksPage"; +import { BlockPage } from "@pages/blocks/BlockPage"; +import { TransactionsPage, ListingType as TXListing } from "@pages/transactions/TransactionsPage"; +import { TransactionPage } from "@pages/transactions/TransactionPage"; +import { NamesPage, ListingType as NamesListing } from "@pages/names/NamesPage"; +import { NamePage } from "@pages/names/NamePage"; + +import { SettingsPage } from "@pages/settings/SettingsPage"; +import { SettingsTranslations } from "@pages/settings/translations/SettingsTranslations"; + +import { WhatsNewPage } from "@pages/whatsnew/WhatsNewPage"; +import { CreditsPage } from "@pages/credits/CreditsPage"; + +import { DevPage } from "@pages/dev/DevPage"; + +import { NotFoundPage } from "@pages/NotFoundPage"; + +interface AppRoute { + path: string; + name: string; + component?: React.ReactNode; +} + +export const APP_ROUTES: AppRoute[] = [ + { path: "/", name: "dashboard", component: }, + + // My wallets, etc + { path: "/wallets", name: "wallets", component: }, + { path: "/contacts", name: "contacts", component: }, + { path: "/me/transactions", name: "myTransactions", + component: }, + { path: "/me/names", name: "myNames", + component: }, + + // Payments + { path: "/send", name: "sendTransaction", component: }, + + // Network explorer + { path: "/network/addresses/:address", name: "address", component: }, + { path: "/network/addresses/:address/transactions", name: "addressTransactions", + component: }, + { path: "/network/addresses/:address/names", name: "addressNames", + component: }, + { path: "/network/blocks", name: "blocks", component: }, + { path: "/network/blocks/lowest", name: "blocksLowest", component: }, + { path: "/network/blocks/:id", name: "block", component: }, + { path: "/network/transactions", name: "transactions", + component: }, + { path: "/network/transactions/:id", name: "transaction", + component: }, + { path: "/network/names", name: "networkNames", + component: }, + { path: "/network/names/new", name: "networkNamesNew", + component: }, + { path: "/network/names/:name", name: "networkName", + component: }, + { path: "/network/names/:name/history", name: "nameHistory", + component: }, + { path: "/network/names/:name/transactions", name: "nameTransactions", + component: }, + { path: "/network/search/transactions/address", name: "searchTransactionsAddress", + component: }, + { path: "/network/search/transactions/name", name: "searchTransactionsName", + component: }, + { path: "/network/search/transactions/metadata", name: "searchTransactionsMetadata", + component: }, + + // Settings + { path: "/settings", name: "settings", component: }, + { path: "/settings/debug", name: "settingsDebug" }, + { path: "/settings/debug/translations", name: "settings", component: }, + + { path: "/whatsnew", name: "whatsNew", component: }, + { path: "/credits", name: "credits", component: }, + + // TODO: remove this + { path: "/dev", name: "dev", component: } +]; + +export function AppRouter(): JSX.Element { + return + {/* Render the matched route's page component */} + {APP_ROUTES.map(({ path, component }, key) => ( + component && ( + + {/* Try to catch errors on a route without crashing everything */} + + {component} + + + ) + ))} + + + ; +} diff --git a/src/global/AppServices.tsx b/src/global/AppServices.tsx new file mode 100644 index 0000000..7cc8254 --- /dev/null +++ b/src/global/AppServices.tsx @@ -0,0 +1,25 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt + +import { SyncWallets } from "@comp/wallets/SyncWallets"; +import { ForcedAuth } from "./ForcedAuth"; +import { WebsocketService } from "./ws/WebsocketService"; +import { SyncMOTD } from "./ws/SyncMOTD"; +import { AppHotkeys } from "./AppHotkeys"; +import { StorageBroadcast } from "./StorageBroadcast"; +import { PurchaseKristHandler } from "./PurchaseKrist"; +import { AdvanceTip } from "@pages/dashboard/TipsCard"; + +export function AppServices(): JSX.Element { + return <> + + + + + + + + + ; +} diff --git a/src/global/ForcedAuth.tsx b/src/global/ForcedAuth.tsx new file mode 100644 index 0000000..abaf804 --- /dev/null +++ b/src/global/ForcedAuth.tsx @@ -0,0 +1,37 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { message } from "antd"; +import { useTranslation, TFunction } from "react-i18next"; + +import { authMasterPassword, useMasterPassword } from "@wallets"; + +import { useMountEffect } from "@utils"; + +async function forceAuth(t: TFunction, salt: string, tester: string): Promise { + try { + const password = localStorage.getItem("forcedAuth"); + if (!password) return; + + await authMasterPassword(salt, tester, password); + message.warning(t("masterPassword.forcedAuthWarning")); + } catch (e) { + console.error(e); + } +} + +/** For development purposes, check the presence of a local storage key + * containing the master password, and automatically authenticate with it. */ +export function ForcedAuth(): JSX.Element | null { + const { isAuthed, hasMasterPassword, salt, tester } + = useMasterPassword(); + + const { t } = useTranslation(); + + useMountEffect(() => { + if (isAuthed || !hasMasterPassword || !salt || !tester) return; + forceAuth(t, salt, tester); + }); + + return null; +} diff --git a/src/global/LocaleContext.tsx b/src/global/LocaleContext.tsx new file mode 100644 index 0000000..e1e476e --- /dev/null +++ b/src/global/LocaleContext.tsx @@ -0,0 +1,116 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { FC, createContext, useEffect, useState } from "react"; +import { ConfigProvider } from "antd"; +import { Locale } from "antd/lib/locale-provider"; + +import { useTranslation } from "react-i18next"; +import { getLanguages } from "@utils/i18n"; + +import dayjs from "dayjs"; + +import { Formatter } from "react-timeago"; +import buildFormatter from "react-timeago/lib/formatters/buildFormatter"; + +import Debug from "debug"; +const debug = Debug("kristweb:locale-context"); + +export const TimeagoFormatterContext = createContext(undefined); + +export const LocaleContext: FC = ({ children }): JSX.Element => { + const { i18n } = useTranslation(); + const langCode = i18n.language; + const languages = getLanguages(); + const lang = languages?.[langCode]; + + // These are wrapped in objects due to some bizarre issues where React was + // attempting to call the timeagoFormatter at some point?? + const [timeagoFormatter, setTimeagoFormatter] = useState<{ formatter: Formatter }>(); + const [antLocale, setAntLocale] = useState<{ locale: Locale }>(); + + // Load the day.js locale if available + useEffect(() => { + // See if the language has a dayjs locale set. If not, revert to `en` + const dayjsLocale = lang?.dayjsLocale; + if (!dayjsLocale) { + debug("language %s doesn't have a dayjs locale, reverting to `en`", langCode); + dayjs.locale("en"); + return; + } + + // Attempt to import the locale asynchronously. This will usually incur a + // network request, but it should be cached by the service worker. + debug("loading dayjs locale %s for language %s", dayjsLocale, langCode); + // Including only `.js` files here ensures that it doesn't attempt to load + // the TypeScript typings, which causes build warnings due to a missing + // loader for those files. + import( + /* webpackInclude: /\.js$/ */ + /* webpackMode: "lazy" */ + /* webpackChunkName: "locale-dayjs-[request]" */ + `dayjs/locale/${dayjsLocale}` + ) + .then(() => { + debug("got dayjs locale %s", dayjsLocale); + dayjs.locale(dayjsLocale); + }) + .catch(console.error); + }, [lang, langCode, languages]); + + // Load the timeago locale if available + useEffect(() => { + // See if the language has a timeago locale set. If not, revert to default + const timeagoLocale = lang?.timeagoLocale; + if (!timeagoLocale) { + debug("language %s doesn't have a timeago locale, reverting to default", langCode); + setTimeagoFormatter(undefined); + return; + } + + // Load the locale + debug("loading timeago locale %s for language %s", timeagoLocale, langCode); + import( + /* webpackInclude: /\.js$/ */ + /* webpackMode: "lazy" */ + /* webpackChunkName: "locale-timeago-[request]" */ + `react-timeago/lib/language-strings/${timeagoLocale}` + ) + .then(strings => { + debug("got timeago locale %s", timeagoLocale); + setTimeagoFormatter({ formatter: buildFormatter(strings.default) }); + }) + .catch(console.error); + }, [lang, langCode, languages]); + + // Load the antd locale if available + useEffect(() => { + // See if the language has an antd locale set. If not, revert to default + const antLocaleCode = lang?.antLocale; + if (!antLocaleCode) { + debug("language %s doesn't have an antd locale, reverting to default", langCode); + setAntLocale(undefined); + return; + } + + // Load the locale + debug("loading antd locale %s for language %s", antLocaleCode, langCode); + import( + /* webpackInclude: /\.js$/ */ + /* webpackMode: "lazy" */ + /* webpackChunkName: "locale-antd-[request]" */ + `antd/lib/locale/${antLocaleCode}` + ) + .then(locale => { + debug("got antd locale %s", antLocaleCode); + setAntLocale({ locale: locale.default }); + }) + .catch(console.error); + }, [lang, langCode, languages]); + + return + + {children} + + ; +}; diff --git a/src/global/PurchaseKrist.tsx b/src/global/PurchaseKrist.tsx new file mode 100644 index 0000000..f43c7e8 --- /dev/null +++ b/src/global/PurchaseKrist.tsx @@ -0,0 +1,89 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useState, Dispatch, SetStateAction } from "react"; +import { Modal, Row, Col, Button } from "antd"; + +import { useTFns } from "@utils/i18n"; + +import { KristValue } from "@comp/krist/KristValue"; + +import { GlobalHotKeys } from "react-hotkeys"; + +interface Props { + visible: boolean; + setVisible: Dispatch>; +} + +interface PurchaseOption { + image?: string; + source: number; + krist: number; +} + +const VALUES: PurchaseOption[][] = [ + [ + { source: 5000, krist: 50 }, { source: 10000, krist: 100 }, + { source: 25000, krist: 250 }, { source: 50000, krist: 500 } + ], + [ + { source: 100000, krist: 1000 }, { source: 250000, krist: 2500 }, + { source: 500000, krist: 5000 }, { source: 500000000, krist: 5000000 } + ] +]; + +export function PurchaseKrist({ + visible, + setVisible +}: Props): JSX.Element { + const { t, tStr } = useTFns("purchaseKrist."); + + return setVisible(false)}> + {t("dialog.close")} + } + onCancel={() => setVisible(false)} + > + {VALUES.map((row, i) => + {row.map((option, i) => ( + +
+ +

+ +
+ + ))} +
)} +
; +} + +export function PurchaseKristHandler(): JSX.Element { + const [visible, setVisible] = useState(false); + + return <> + + + setVisible(true) }} + /> + ; +} diff --git a/src/global/StorageBroadcast.tsx b/src/global/StorageBroadcast.tsx new file mode 100644 index 0000000..e0e3da2 --- /dev/null +++ b/src/global/StorageBroadcast.tsx @@ -0,0 +1,110 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { store } from "@app"; +import * as actions from "@actions/WalletsActions"; +import * as contactActions from "@actions/ContactsActions"; + +import { getWalletKey, parseWallet, syncWallet } from "@wallets"; +import { getContactKey, parseContact } from "@contacts"; + +import Debug from "debug"; +const debug = Debug("kristweb:storage-broadcast"); + +export const channel = new BroadcastChannel("kristweb:storage"); + +export function broadcastAddWallet(id: string): void { + debug("broadcasting addWallet event for wallet id %s", id); + channel.postMessage(["addWallet", id]); +} + +export function broadcastEditWallet(id: string): void { + debug("broadcasting editWallet event for wallet id %s", id); + channel.postMessage(["editWallet", id]); +} + +export function broadcastDeleteWallet(id: string): void { + debug("broadcasting deleteWallet event for wallet id %s", id); + channel.postMessage(["deleteWallet", id]); +} + +export function broadcastAddContact(id: string): void { + debug("broadcasting deleteContact event for contact id %s", id); + channel.postMessage(["deleteContact", id]); +} + +export function broadcastEditContact(id: string): void { + debug("broadcasting editContact event for contact id %s", id); + channel.postMessage(["editContact", id]); +} + +export function broadcastDeleteContact(id: string): void { + debug("broadcasting deleteContact event for contact id %s", id); + channel.postMessage(["deleteContact", id]); +} + +/** Component that manages a BroadcastChannel responsible for dispatching wallet + * storage events (add, edit, delete) across tabs. */ +export function StorageBroadcast(): JSX.Element | null { + // TODO: is it safe to register this here? + debug("registering storage broadcast event listener"); + channel.onmessage = e => { + debug("received storage broadcast:", e); + + if (Array.isArray(e.data)) { + const [type, ...data] = e.data; + + if (type === "addWallet" || type === "editWallet") { + // --------------------------------------------------------------------- + // addWallet, editWallet + // --------------------------------------------------------------------- + const id: string = data[0]; + const key = getWalletKey(id); + + // Load the wallet from localStorage (the update should've been + // synchronous) + const wallet = parseWallet(id, localStorage.getItem(key)); + debug("%s broadcast %s", type, id); + + // Dispatch the new/updated wallet to the Redux store + if (type === "addWallet") store.dispatch(actions.addWallet(wallet)); + else store.dispatch(actions.updateWallet(id, wallet)); + + syncWallet(wallet, true); + } else if (type === "deleteWallet") { + // --------------------------------------------------------------------- + // deleteWallet + // --------------------------------------------------------------------- + const id: string = data[0]; + debug("addWallet broadcast %s", id); + store.dispatch(actions.removeWallet(id)); + } else if (type === "addContact" || type === "editContact") { + // --------------------------------------------------------------------- + // addContact, editContact + // --------------------------------------------------------------------- + const id: string = data[0]; + const key = getContactKey(id); + + // Load the contact from localStorage (the update should've been + // synchronous) + const contact = parseContact(id, localStorage.getItem(key)); + debug("%s broadcast %s", type, id); + + // Dispatch the new/updated contact to the Redux store + if (type === "addContact") store.dispatch(contactActions.addContact(contact)); + else store.dispatch(contactActions.updateContact({ id, contact })); + } else if (type === "deleteContact") { + // --------------------------------------------------------------------- + // deleteContact + // --------------------------------------------------------------------- + const id: string = data[0]; + debug("deleteContact broadcast %s", id); + store.dispatch(contactActions.removeContact(id)); + } else { + debug("received unknown broadcast msg type %s", type); + } + } + }; + + return null; +} diff --git a/src/global/compat/CompatCheckModal.less b/src/global/compat/CompatCheckModal.less new file mode 100644 index 0000000..41a05a7 --- /dev/null +++ b/src/global/compat/CompatCheckModal.less @@ -0,0 +1,43 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +@import (reference) "../../App.less"; + +.compat-check-modal { + .ant-modal-confirm-btns { + display: none; + } + + .browser-choices { + display: flex; + flex-direction: row; + + // Remove the offset from the confirm modal body padding + margin-left: -38px; + padding-top: @margin-sm; + + a { + flex: 1; + + display: flex; + flex-direction: column; + + padding: @margin-sm; + + color: @text-color; + text-align: center; + background: transparent; + border-radius: @border-radius-base; + transition: all @animation-duration-base ease; + + &:hover { + background: @kw-lighter; + } + + img { + width: 96px; + margin: 0 auto @margin-md auto; + } + } + } +} diff --git a/src/global/compat/CompatCheckModal.tsx b/src/global/compat/CompatCheckModal.tsx new file mode 100644 index 0000000..c56de57 --- /dev/null +++ b/src/global/compat/CompatCheckModal.tsx @@ -0,0 +1,69 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { Modal, Typography } from "antd"; + +import { CompatCheck } from "."; + +import "./CompatCheckModal.less"; + +const { Text } = Typography; + +interface Props { + failedChecks: CompatCheck[]; +} + +function CompatCheckModalContent({ failedChecks }: Props): JSX.Element { + // Note that this modal is not translated, as `fetch` is one of the APIs that + // may be unavailable. + + return <> +

Your browser is missing features required by KristWeb. +
Please upgrade your web browser.

+ + {/* Missing feature list */} +

+ Missing feature{failedChecks.length > 1 && <>s}:  + {failedChecks.map((c, i, a) => ( + + {c.url + ? + {c.name} + + : {c.name}} + + {i < a.length - 1 && <>, } + + ))} +

+ +

Please upgrade to the latest version of one of these recommended browsers:

+ + {/* Browser choices */} + + ; +} + +export function openCompatCheckModal(failedChecks: CompatCheck[]): void { + Modal.error({ + title: "Unsupported browser", + + width: 640, + className: "compat-check-modal", + + okButtonProps: { style: { display: "none" }}, + closable: false, + + content: + }); +} diff --git a/src/global/compat/index.ts b/src/global/compat/index.ts new file mode 100644 index 0000000..b4ed6ab --- /dev/null +++ b/src/global/compat/index.ts @@ -0,0 +1,61 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { localStorageAvailable } from "./localStorage"; + +import { openCompatCheckModal } from "./CompatCheckModal"; + +import Debug from "debug"; +const debug = Debug("kristweb:compat-check"); + +export interface CompatCheck { + name: string; + url?: string; + check: () => Promise | boolean; +} + +const CHECKS: CompatCheck[] = [ + { name: "Local Storage", url: "https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage", + check: localStorageAvailable }, + { name: "IndexedDB", url: "https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API", + check: () => !!window.indexedDB }, + { name: "Fetch", url: "https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API", + check: () => !!window.fetch }, + { name: "Crypto", url: "https://developer.mozilla.org/en-US/docs/Web/API/Window/crypto", + check: () => !!window.crypto }, + { name: "SubtleCrypto", url: "https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto", + check: () => !!window.crypto && !!window.crypto.subtle }, + { name: "Broadcast Channel", url: "https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API", + check: () => !!BroadcastChannel }, + { name: "Web Workers", url: "https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers", + check: () => !!window.Worker } + // NOTE: Service workers are not checked here, because they are disabled in + // Firefox private browsing. +]; + +/** Checks if the browser has all the required APIs, and returns an array of + * failed compatibility checks. */ +async function runCompatChecks(): Promise { + const failed: CompatCheck[] = []; + for (const check of CHECKS) { + try { + if (!(await check.check())) + throw new Error("check returned false"); + } catch (err) { + debug("compatibility check %s failed", check.name); + console.error(err); + failed.push(check); + } + } + return failed; +} + +/** Runs the compatibility checks, displaying the "Unsupported browser" modal + * and throwing if any of them fail. */ +export async function compatCheck(): Promise { + const failedChecks = await runCompatChecks(); + if (failedChecks.length) { + openCompatCheckModal(failedChecks); + throw new Error("compat checks failed"); + } +} diff --git a/src/global/compat/localStorage.ts b/src/global/compat/localStorage.ts new file mode 100644 index 0000000..8745e47 --- /dev/null +++ b/src/global/compat/localStorage.ts @@ -0,0 +1,31 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt + +// Implementation sourced from MDN: +// https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#feature-detecting_localstorage +export function localStorageAvailable( + type: "localStorage" | "sessionStorage" = "localStorage" +): boolean { + let storage; + try { + storage = window[type]; + const x = "__storage_test__"; + storage.setItem(x, x); + storage.removeItem(x); + return true; + } catch(e) { + return e instanceof DOMException && ( + // everything except Firefox + e.code === 22 || + // Firefox + e.code === 1014 || + // test name field too, because code might not be present + // everything except Firefox + e.name === "QuotaExceededError" || + // Firefox + e.name === "NS_ERROR_DOM_QUOTA_REACHED") && + // acknowledge QuotaExceededError only if there's something already stored + (!!storage && storage.length !== 0); + } +} diff --git a/src/global/ws/SyncDetailedWork.tsx b/src/global/ws/SyncDetailedWork.tsx new file mode 100644 index 0000000..04947b5 --- /dev/null +++ b/src/global/ws/SyncDetailedWork.tsx @@ -0,0 +1,36 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useEffect } from "react"; + +import { useSelector } from "react-redux"; +import { RootState } from "@store"; +import * as nodeActions from "@actions/NodeActions"; + +import { store } from "@app"; + +import * as api from "@api"; +import { KristWorkDetailed } from "@api/types"; + +import Debug from "debug"; +const debug = Debug("kristweb:sync-work"); + +export async function updateDetailedWork(): Promise { + debug("updating detailed work"); + const data = await api.get("work/detailed"); + + debug("work: %d", data.work); + store.dispatch(nodeActions.setDetailedWork(data)); +} + +/** Sync the detailed work with the Krist node on startup. */ +export function SyncDetailedWork(): JSX.Element | null { + const { lastBlockID } = useSelector((s: RootState) => s.node); + + useEffect(() => { + // TODO: show errors to the user? + updateDetailedWork().catch(console.error); + }, [lastBlockID]); + + return null; +} diff --git a/src/global/ws/SyncMOTD.tsx b/src/global/ws/SyncMOTD.tsx new file mode 100644 index 0000000..8dd7ca0 --- /dev/null +++ b/src/global/ws/SyncMOTD.tsx @@ -0,0 +1,70 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useEffect } from "react"; + +import { useSelector } from "react-redux"; +import { RootState } from "@store"; +import * as nodeActions from "@actions/NodeActions"; + +import { store } from "@app"; + +import * as api from "@api"; +import { KristMOTD, KristMOTDBase } from "@api/types"; + +import { + recalculateWallets, useWallets, useMasterPasswordOnly +} from "@wallets"; +import { useAddressPrefix } from "@utils/currency"; + +import Debug from "debug"; +const debug = Debug("kristweb:sync-motd"); + +export async function updateMOTD(): Promise { + debug("updating motd"); + const data = await api.get("motd"); + + debug("motd: %s", data.motd); + store.dispatch(nodeActions.setPackage(data.package)); + store.dispatch(nodeActions.setCurrency(data.currency)); + store.dispatch(nodeActions.setConstants(data.constants)); + + if (data.last_block) { + debug("motd last block id: %d", data.last_block.height); + store.dispatch(nodeActions.setLastBlockID(data.last_block.height)); + } + + const motdBase: KristMOTDBase = { + motd: data.motd, + motdSet: new Date(data.motd_set), + debugMode: data.debug_mode, + miningEnabled: data.mining_enabled + }; + store.dispatch(nodeActions.setMOTD(motdBase)); +} + +/** Sync the MOTD with the Krist node on startup. */ +export function SyncMOTD(): JSX.Element | null { + const syncNode = api.useSyncNode(); + const connectionState = useSelector((s: RootState) => s.websocket.connectionState); + + // All these are used to determine if we need to recalculate the addresses + const addressPrefix = useAddressPrefix(); + const masterPassword = useMasterPasswordOnly(); + const { wallets } = useWallets(); + + // Update the MOTD when the sync node changes, and on startup + useEffect(() => { + if (connectionState !== "connected") return; + updateMOTD().catch(console.error); + }, [syncNode, connectionState]); + + // When the currency's address prefix changes, or our master password appears, + // recalculate the addresses if necessary + useEffect(() => { + if (!addressPrefix || !masterPassword) return; + recalculateWallets(masterPassword, wallets, addressPrefix).catch(console.error); + }, [addressPrefix, masterPassword, wallets]); + + return null; +} diff --git a/src/global/ws/WebsocketConnection.ts b/src/global/ws/WebsocketConnection.ts new file mode 100644 index 0000000..14492c4 --- /dev/null +++ b/src/global/ws/WebsocketConnection.ts @@ -0,0 +1,285 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { store } from "@app"; +import * as wsActions from "@actions/WebsocketActions"; +import * as nodeActions from "@actions/NodeActions"; + +import * as api from "@api"; +import { KristAddress, KristBlock, KristTransaction, WSConnectionState, WSIncomingMessage, WSSubscriptionLevel } from "@api/types"; +import { Wallet, WalletMap, findWalletByAddress, syncWalletUpdate } from "@wallets"; +import WebSocketAsPromised from "websocket-as-promised"; + +import { WSSubscription } from "./WebsocketSubscription"; + +import { throttle } from "lodash-es"; + +import Debug from "debug"; +const debug = Debug("kristweb:websocket-connection"); + +const REFRESH_THROTTLE_MS = 500; +const DEFAULT_CONNECT_DEBOUNCE_MS = 1000; +const MAX_CONNECT_DEBOUNCE_MS = 360000; + +export class WebsocketConnection { + private wallets?: WalletMap; + private ws?: WebSocketAsPromised; + private reconnectionTimer?: number; + + private messageID = 1; + private connectDebounce = DEFAULT_CONNECT_DEBOUNCE_MS; + + private forceClosing = false; + + // TODO: automatically clean this up? + private refreshThrottles: Record void> = {}; + + private subscriptions: Record = {}; + + constructor(public syncNode: string) { + debug("WS component init"); + this.attemptConnect(); + } + + setWallets(wallets: WalletMap): void { + this.wallets = wallets; + } + + private async connect() { + debug("attempting connection to server..."); + this.setConnectionState("disconnected"); + + // Get a websocket token + const { url } = await api.post<{ url: string }>("ws/start"); + + this.setConnectionState("connecting"); + + // Connect to the websocket server + this.ws = new WebSocketAsPromised(url, { + packMessage: data => JSON.stringify(data), + unpackMessage: data => JSON.parse(data.toString()) + }); + + this.ws.onUnpackedMessage.addListener(this.handleMessage.bind(this)); + this.ws.onClose.addListener(this.handleClose.bind(this)); + + this.messageID = 1; + await this.ws.open(); + this.connectDebounce = DEFAULT_CONNECT_DEBOUNCE_MS; + } + + async attemptConnect(): Promise { + try { + await this.connect(); + } catch (err) { + this.handleDisconnect(err); + } + } + + private handleDisconnect(err?: Error) { + if (this.reconnectionTimer) window.clearTimeout(this.reconnectionTimer); + + // TODO: show errors to the user? + this.setConnectionState("disconnected"); + debug("failed to connect to server, reconnecting in %d ms", this.connectDebounce, err); + + this.reconnectionTimer = window.setTimeout(() => { + this.connectDebounce = Math.min(this.connectDebounce * 2, MAX_CONNECT_DEBOUNCE_MS); + this.attemptConnect(); + }, this.connectDebounce); + } + + handleClose(event: { code: number; reason: string }): void { + debug("ws closed with code %d reason %s", event.code, event.reason); + this.handleDisconnect(); + } + + /** Forcibly disconnect this instance from the websocket server (e.g. on + * component unmount) */ + forceClose(): void { + debug("received force close request"); + + if (this.forceClosing) return; + this.forceClosing = true; + + if (!this.ws || !this.ws.isOpened || this.ws.isClosed) return; + debug("force closing ws"); + this.ws.close(); + } + + private setConnectionState(state: WSConnectionState) { + debug("ws conn state: %s", state); + store.dispatch(wsActions.setConnectionState(state)); + } + + handleMessage(data: WSIncomingMessage): void { + if (!this.ws || !this.ws.isOpened || this.ws.isClosed) return; + + if (data.ok === false || data.error) + debug("message ERR: %d %s", data.id || -1, data.error); + + if (data.type === "hello") { + // Initial connection + debug("connected"); + + // Subscribe to all the events + this.subscribe("transactions"); + this.subscribe("blocks"); + this.subscribe("names"); + this.subscribe("motd"); + + this.setConnectionState("connected"); + } else if (data.address && this.wallets) { + // Probably a response to `refreshBalance` + const address: KristAddress = data.address; + const wallet = findWalletByAddress(this.wallets, address.address); + if (!wallet) return; + + debug("syncing %s to %s (balance: %d)", address.address, wallet.id, address.balance); + syncWalletUpdate(wallet, address); + } else if (data.type === "event" && data.event && this.wallets) { + // Handle events + switch (data.event) { + case "transaction": { + // If we receive a transaction relevant to any of our wallets, refresh + // the balances. + const transaction = data.transaction as KristTransaction; + debug("transaction [%s] from %s to %s", transaction.type, transaction.from || "null", transaction.to || "null"); + + const fromWallet = findWalletByAddress(this.wallets, transaction.from || undefined); + const toWallet = findWalletByAddress(this.wallets, transaction.to); + + this.updateTransactionIDs(transaction, fromWallet, toWallet); + + switch (transaction.type) { + // Update the name counts using the address lookup + case "name_purchase": + case "name_transfer": + if (fromWallet) this.refreshBalance(fromWallet.address, true); + if (toWallet) this.refreshBalance(toWallet.address, true); + break; + + // Any other transaction; refresh the balances via the websocket + default: + if (fromWallet) this.refreshBalance(fromWallet.address); + if (toWallet) this.refreshBalance(toWallet.address); + break; + } + + break; + } + case "block": { + // Update the last block ID, which will trigger a re-fetch for + // work-related and block value-related components. + const block = data.block as KristBlock; + debug("block id now %d", block.height); + + store.dispatch(nodeActions.setLastBlockID(block.height)); + + break; + } + } + } + } + + private updateTransactionIDs(transaction: KristTransaction, fromWallet?: Wallet | null, toWallet?: Wallet | null) { + // Updating these last IDs will trigger auto-refreshes on pages that need + // them + const { + id, + from, to, + name: txName, sent_name: txSentName, + type + } = transaction; + + // Generic "last transaction ID", used for network transaction tables + debug("lastTransactionID now %d", id); + store.dispatch(nodeActions.setLastTransactionID(id)); + + // Transactions to/from our own wallets, for the "my transactions" table + if (fromWallet || toWallet) { + debug("lastOwnTransactionID now %d", id); + store.dispatch(nodeActions.setLastOwnTransactionID(id)); + } + + // Name transactions to/from our own names and network names + if (type.startsWith("name_")) { + debug("lastNameTransactionID now %d", id); + store.dispatch(nodeActions.setLastNameTransactionID(id)); + + if (fromWallet || toWallet) { + debug("lastOwnNameTransactionID now %d", id); + store.dispatch(nodeActions.setLastOwnNameTransactionID(id)); + } + } + + // Non-mined transactions for transaction tables that exclude mined + // transactions + if (type !== "mined") { + debug("lastNonMinedTransactionID now %d", id); + store.dispatch(nodeActions.setLastNonMinedTransactionID(id)); + } + + // Find addresses/names that we are subscribed to + for (const subID in this.subscriptions) { + const { address, name } = this.subscriptions[subID]; + + // Found a subscription interested in the addresses involved in this tx + if (from && address === from || to && address === to) { + debug("[address] updating subscription %s id to %d", subID, id); + store.dispatch(wsActions.updateSubscription(subID, id)); + } + + // Found a subscription interested in the name involved in this tx + if ((txName && txName === name) || (txSentName && txSentName === name)) { + debug("[name] updating subscription %s id to %d", subID, id); + store.dispatch(wsActions.updateSubscription(subID, id)); + } + } + } + + /** Queues a command to re-fetch an address's balance. The response will be + * handled in {@link handleMessage}. This is automatically throttled to + * execute on the leading edge of 500ms (REFRESH_THROTTLE_MS). */ + refreshBalance(address: string, fetchNames?: boolean): void { + if (this.refreshThrottles[address]) { + // Use the existing throttled function if it exists + this.refreshThrottles[address](address); + } else { + // Create and cache a new throttle function for this address + const throttled = throttle( + this._refreshBalance.bind(this), + REFRESH_THROTTLE_MS, + { leading: true, trailing: false } + ); + + this.refreshThrottles[address] = throttled; + throttled(address, fetchNames); + } + } + + private _refreshBalance(address: string, fetchNames?: boolean) { + debug("refreshing balance of %s", address); + this.ws?.sendPacked({ + type: "address", + id: this.messageID++, + address, + fetchNames + }); + } + + /** Subscribe to a Krist WS event. */ + subscribe(event: WSSubscriptionLevel): void { + this.ws?.sendPacked({ type: "subscribe", event, id: this.messageID++ }); + } + + addSubscription(id: string, subscription: WSSubscription): void { + debug("ws received added subscription %s", id); + this.subscriptions[id] = subscription; + } + + removeSubscription(id: string): void { + debug("ws received removed subscription %s", id); + if (this.subscriptions[id]) delete this.subscriptions[id]; + } +} diff --git a/src/global/ws/WebsocketProvider.tsx b/src/global/ws/WebsocketProvider.tsx new file mode 100644 index 0000000..3f1623b --- /dev/null +++ b/src/global/ws/WebsocketProvider.tsx @@ -0,0 +1,25 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { FC, createContext, useState, Dispatch, SetStateAction } from "react"; + +import { WebsocketConnection } from "./WebsocketConnection"; + +import Debug from "debug"; +const debug = Debug("kristweb:websocket-provider"); + +export interface WSContextType { + connection?: WebsocketConnection; + setConnection?: Dispatch>; +} +export const WebsocketContext = createContext({}); + +export const WebsocketProvider: FC = ({ children }): JSX.Element => { + const [connection, setConnection] = useState(); + + debug("ws provider re-rendering"); + + return + {children} + ; +}; diff --git a/src/global/ws/WebsocketService.tsx b/src/global/ws/WebsocketService.tsx new file mode 100644 index 0000000..22f3f28 --- /dev/null +++ b/src/global/ws/WebsocketService.tsx @@ -0,0 +1,52 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useEffect, useContext } from "react"; + +import { WebsocketContext } from "./WebsocketProvider"; +import { WebsocketConnection } from "./WebsocketConnection"; + +import * as api from "@api"; +import { useWallets } from "@wallets"; + +import Debug from "debug"; +const debug = Debug("kristweb:websocket-service"); + +export function WebsocketService(): JSX.Element | null { + const { wallets } = useWallets(); + const syncNode = api.useSyncNode(); + + const { connection, setConnection } = useContext(WebsocketContext); + + // On first render, or if the sync node changes, create the websocket + // connection + useEffect(() => { + // Don't reconnect if we already have a connection and the sync node hasn't + // changed (prevents infinite loops) + if (connection && connection.syncNode === syncNode) return; + + // Close any existing connections + if (connection) connection.forceClose(); + + if (!setConnection) { + debug("ws provider setConnection is missing!"); + return; + } + + // Connect to the Krist websocket server + setConnection(new WebsocketConnection(syncNode)); + + // On unmount, force close the existing connection + return () => { + if (connection) connection.forceClose(); + }; + }, [syncNode, connection, setConnection]); + + // If the wallets change, let the websocket service know so that it can keep + // track of events related to any new wallets + useEffect(() => { + if (connection) connection.setWallets(wallets); + }, [wallets, connection]); + + return null; +} diff --git a/src/global/ws/WebsocketSubscription.ts b/src/global/ws/WebsocketSubscription.ts new file mode 100644 index 0000000..c712385 --- /dev/null +++ b/src/global/ws/WebsocketSubscription.ts @@ -0,0 +1,106 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useContext, useState, useEffect } from "react"; +import { v4 as uuid } from "uuid"; + +import { useSelector } from "react-redux"; +import { RootState } from "@store"; +import * as actions from "@actions/WebsocketActions"; + +import { WebsocketContext } from "./WebsocketProvider"; + +import Debug from "debug"; +const debug = Debug("kristweb:websocket-subscription"); + +export interface WSSubscription { + address?: string; + name?: string; + lastTransactionID: number; +} + +export function createSubscription(address?: string, name?: string): [string, WSSubscription] { + const id = uuid(); + + // It's okay to initialise at 0, since it will still render appropriately; + // it will be updated whenever a relevant transaction comes in + const subscription = { + address, name, lastTransactionID: 0 + }; + + // Dispatch the new subscription to the Redux store + actions.initSubscription(id, subscription); + + return [id, subscription]; +} + +export function removeSubscription(id: string): void { + // Dispatch the changes subscription to the Redux store + actions.removeSubscription(id); +} + +/** Creates a subscription to an address or name's last transaction ID. + * Will return 0 unless a transaction was detected after the subscription was + * created. */ +export function useSubscription({ address, name }: { address?: string; name?: string }): number { + const { connection } = useContext(WebsocketContext); + const [subscriptionID, setSubscriptionID] = useState(); + + // Don't select anything if there's no address or name anymore + const selector = address || name ? (subscriptionID || "") : ""; + const storeSubscription = useSelector((s: RootState) => s.websocket.subscriptions[selector]); + + // Create the subscription on mount if we don't have one + useEffect(() => { + if (!connection && subscriptionID) { + debug("connection lost, wiping subscription ID"); + removeSubscription(subscriptionID); + setSubscriptionID(undefined); + return; + } else if (!connection || subscriptionID) return; + + // This hook may still get called if there's nothing the caller wants to + // subscribe to, so stop here if that's the case + if (!address && !name) return; + + debug("ws subscription has no id yet, registering one"); + const [id, subscription] = createSubscription(address, name); + connection.addSubscription(id, subscription); + setSubscriptionID(id); + debug("new subscription id is %s", id); + }, [connection, subscriptionID, address, name]); + + // If the address or name change, wipe the subscription ID + useEffect(() => { + if (subscriptionID) { + debug("address or name changed, wiping subscription"); + if (connection) connection.removeSubscription(subscriptionID); + removeSubscription(subscriptionID); + setSubscriptionID(undefined); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [address, name]); + + // Unsubscribe when unmounted + useEffect(() => { + return () => { + if (!subscriptionID) return; + debug("ws subscription %s being removed due to unmount", subscriptionID); + + if (connection) connection.removeSubscription(subscriptionID); + removeSubscription(subscriptionID); + }; + }, [connection, subscriptionID]); + + if (!connection) { + debug("ws subscription returning 0 because no connection yet"); + return 0; + } + + const out = storeSubscription + ? storeSubscription.lastTransactionID + : 0; + + // debug("ws subscription %s is %d", subscriptionID, out); + return out; +} diff --git a/src/index.css b/src/index.css index ec2585e..8ed5fcd 100644 --- a/src/index.css +++ b/src/index.css @@ -1,3 +1,6 @@ +/* Copyright (c) 2020-2021 Drew Lemmy + * This file is part of KristWeb 2 under AGPL-3.0. + * Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt */ body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', diff --git a/src/index.tsx b/src/index.tsx index f5185c1..6e099b7 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,17 +1,65 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import './index.css'; -import App from './App'; -import * as serviceWorker from './serviceWorker'; +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import "@utils/setup"; +import { i18nLoader } from "@utils/i18n"; +import { isLocalhost } from "@utils"; -ReactDOM.render( - - - , - document.getElementById('root') -); +import ReactDOM from "react-dom"; -// If you want your app to work offline and load faster, you can change -// unregister() to register() below. Note this comes with some pitfalls. -// Learn more about service workers: https://bit.ly/CRA-PWA -serviceWorker.unregister(); +import { compatCheck } from "@global/compat"; +import { notification } from "antd"; + +import "./index.css"; +import App from "@app"; + +import Debug from "debug"; +const debug = Debug("kristweb:index"); + +async function main() { + debug("=========================== APP STARTING ==========================="); + debug("performing compat checks"); + await compatCheck(); + + if (isLocalhost && !localStorage.getItem("status")) { + // Automatically enable debug logging on localhost + localStorage.setItem("debug", "kristweb:*"); + localStorage.setItem("status", "LOCAL"); + location.reload(); + } + + debug("waiting for i18n"); + await i18nLoader; + + initialRender(); +} + +function initialRender() { + debug("performing initial render"); + ReactDOM.render( + // FIXME: ant-design still has a few incompatibilities with StrictMode, most + // notably in rc-menu. Keep an eye on the issue to track progress and + // prepare for React 17: + // https://github.com/ant-design/ant-design/issues/26136 + // + , + // , + document.getElementById("root") + ); +} + +main().catch(err => { + // Remove the preloader + document.getElementById("kw-preloader")?.remove(); + + // Don't show the notification if a modal is already being shown + if (err?.message === "compat checks failed") return; + + debug("critical error in index.tsx"); + console.error(err); + + notification.error({ + message: "Critical error", + description: "A critical startup error has occurred. Please report this on GitHub. See console for details." + }); +}); diff --git a/src/krist/addressAlgo.ts b/src/krist/addressAlgo.ts new file mode 100644 index 0000000..5183375 --- /dev/null +++ b/src/krist/addressAlgo.ts @@ -0,0 +1,34 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { sha256, doubleSHA256 } from "@utils/crypto"; + +const hexToBase36 = (input: number): string => { + const byte = 48 + Math.floor(input / 7); + return String.fromCharCode(byte + 39 > 122 ? 101 : byte > 57 ? byte + 39 : byte); +}; + +export const makeV2Address = async (addressPrefix: string, key: string): Promise => { + const chars = ["", "", "", "", "", "", "", "", ""]; + let chain = addressPrefix; + let hash = await doubleSHA256(key); + + for (let i = 0; i <= 8; i++) { + chars[i] = hash.substring(0, 2); + hash = await doubleSHA256(hash); + } + + for (let i = 0; i <= 8;) { + const index = parseInt(hash.substring(2 * i, 2 + (2 * i)), 16) % 9; + + if (chars[index] === "") { + hash = await sha256(hash); + } else { + chain += hexToBase36(parseInt(chars[index], 16)); + chars[index] = ""; + i++; + } + } + + return chain; +}; diff --git a/src/krist/api/AuthFailed.tsx b/src/krist/api/AuthFailed.tsx new file mode 100644 index 0000000..e78a511 --- /dev/null +++ b/src/krist/api/AuthFailed.tsx @@ -0,0 +1,105 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useState, useEffect, ReactElement } from "react"; +import { Modal, Spin, Alert } from "antd"; +import { ModalStaticFunctions } from "antd/lib/modal/confirm"; + +import { useTranslation } from "react-i18next"; + +import { Wallet, decryptWallet, useMasterPasswordOnly } from "@wallets"; + +import * as api from "./"; + +// Used to carry around information on which address failed auth +export class AuthFailedError extends api.APIError { + constructor(message: string, public address?: string) { + super(message); + } +} + +export type ShowAuthFailedFn = (wallet: Wallet) => void; + +interface AuthFailedModalHookResponse { + authFailedModal: Omit; + authFailedContextHolder: ReactElement; + showAuthFailed: ShowAuthFailedFn; +} + +/** + * Hook that returns a Modal instance and a contextHolder for it. When the + * modal is shown, it performs an alert lookup for the given private key, + * showing the alert if possible, and otherwise a generic 'auth failed' + * message. + */ +export function useAuthFailedModal(): AuthFailedModalHookResponse { + const { t } = useTranslation(); + const [modal, contextHolder] = Modal.useModal(); + + // Create the auth failed modal and show it + function showAuthFailed(wallet: Wallet) { + modal.error({ + title: t("authFailed.title"), + content: + }); + } + + return { + authFailedModal: modal, + authFailedContextHolder: contextHolder, + showAuthFailed + }; +} + +interface AlertAPIResponse { + alert: string; +} + +function ModalContents({ wallet }: { wallet: Wallet }): JSX.Element { + const { t } = useTranslation(); + + // The alert from the sync node + const [alert, setAlert] = useState(); + const [loading, setLoading] = useState(true); + + // Needed to decrypt the wallet, as the privatekey is required to get alert + const masterPassword = useMasterPasswordOnly(); + + // Fetch the alert from the sync node (this will usually determine if the + // address was locked or it's just a collision) + useEffect(() => { + if (!masterPassword) return; + + // Errors are generally ignored here, this whole dialog is a very minor + // edge case that only a few will see. + (async () => { + // Decrypt the wallet + const decrypted = await decryptWallet(masterPassword, wallet); + if (!decrypted) return; // This should never happen + const { privatekey } = decrypted; + + // Perform the fetch + api.post("/addresses/alert", { privatekey }) + .then(res => setAlert(res.alert)) + .catch(console.error) + .finally(() => setLoading(false)); + })().catch(console.error); + }, [wallet, masterPassword]); + + return + {alert + // If there is a known alert from the server, this address is locked, show + // the alert: + ? <> +

{t("authFailed.messageLocked")}

+ + + + // Otherwise, show a generic "You do not own this address." message. + : t("authFailed.message")} +
; +} diff --git a/src/krist/api/index.ts b/src/krist/api/index.ts new file mode 100644 index 0000000..5c9d6a3 --- /dev/null +++ b/src/krist/api/index.ts @@ -0,0 +1,76 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { notification } from "antd"; +import i18n from "@utils/i18n"; + +import { useSelector } from "react-redux"; +import { RootState } from "@store"; +import { store } from "@app"; + +import { APIResponse } from "./types"; +import { throttle } from "lodash-es"; + +export class APIError extends Error { + constructor(message: string, public parameter?: string) { + super(message); + } +} + +export class RateLimitError extends APIError { + constructor() { super("rate_limit_hit"); } +} + +// Realistically, the only situation in which a rate limit will actually be hit +// by KristWeb is if an infinite loop is introduced (e.g. via useEffect), so we +// would want to avoid spamming notifications and making the performance bug +// worse, therefore this notification is throttled to 5 seconds. +const _notifyRateLimit = () => + notification.error({ message: i18n.t("rateLimitTitle"), description: i18n.t("rateLimitDescription") }); +const notifyRateLimit = throttle(_notifyRateLimit, 5000); + +interface RequestOptions extends RequestInit { + /** Suppresses the notification for a rate limited request. An error will + * still be thrown. */ + ignoreRateLimit?: boolean; +} + +export async function request(method: string, endpoint: string, options?: RequestOptions): Promise> { + const syncNode = store.getState().node.syncNode; + + // Let the fetch bubble its error upwards + const res = await fetch(syncNode + "/" + endpoint.replace(/^\//, ""), { + method, + ...options + }); + + if (res.status === 429) { + if (!options?.ignoreRateLimit) notifyRateLimit(); + throw new RateLimitError(); + } + + const data: APIResponse = await res.json(); + if (!data.ok || data.error) + throw new APIError(data.error || "unknown_error", data.parameter); + + return data; +} + +/** Generates a stringified JSON POST body, with the appropriate Content-Type + * headers for the request. */ +export const buildBody = (value: any): RequestOptions => ({ + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(value) +}); + +export const get = (endpoint: string, options?: RequestOptions): Promise> => + request("GET", endpoint, options); +export const post = (endpoint: string, body?: any, options?: RequestOptions): Promise> => + request("POST", endpoint, { + ...buildBody(body), + ...options + }); + +/** Re-usable syncNode hook, usually for refreshing things when the syncNode + * changes. */ +export const useSyncNode = (): string => useSelector((s: RootState) => s.node.syncNode); diff --git a/src/krist/api/lookup.ts b/src/krist/api/lookup.ts new file mode 100644 index 0000000..3d834ec --- /dev/null +++ b/src/krist/api/lookup.ts @@ -0,0 +1,163 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { KristAddress, KristTransaction, KristName, KristBlock } from "./types"; +import * as api from "."; + +import { LookupFilterOptionsBase, LookupResponseBase, getFilterOptionsQuery } from "@utils/table"; + +// ============================================================================= +// Addresses +// ============================================================================= +interface LookupAddressesResponse { + found: number; + notFound: number; + addresses: Record; +} + +export interface KristAddressWithNames extends KristAddress { names?: number } +export type AddressLookupResults = Record; + +export async function lookupAddresses( + addresses: string[], + fetchNames?: boolean +): Promise { + if (!addresses || addresses.length === 0) return {}; + + try { + const data = await api.get( + "lookup/addresses/" + + encodeURIComponent(addresses.join(",")) + + (fetchNames ? "?fetchNames" : "") + ); + + return data.addresses; + } catch (err) { + // TODO: proper error handling function for API requests + console.error(err); + } + + return {}; +} + +/** Uses the lookup API to retrieve a single address. */ +export async function lookupAddress( + address: string, + fetchNames?: boolean +): Promise { + const data = await api.get( + "lookup/addresses/" + + encodeURIComponent(address) + + (fetchNames ? "?fetchNames" : "") + ); + + const kristAddress = data.addresses[address]; + if (!kristAddress) throw new api.APIError("address_not_found"); + + return kristAddress; +} + +// ============================================================================= +// Blocks +// ============================================================================= +export type SortableBlockFields = "height" | "address" | "hash" | "value" | + "time" | "difficulty"; +export type LookupBlocksOptions = LookupFilterOptionsBase; + +export interface LookupBlocksResponse extends LookupResponseBase { + blocks: KristBlock[]; +} + +export async function lookupBlocks( + opts: LookupBlocksOptions +): Promise { + const qs = getFilterOptionsQuery(opts); + return await api.get("lookup/blocks?" + qs); +} + +// ============================================================================= +// Transactions +// ============================================================================= +export type SortableTransactionFields = "id" | "from" | "to" | "value" | "time" + | "sent_name" | "sent_metaname"; + +export enum LookupTransactionType { + TRANSACTIONS, + NAME_HISTORY, + NAME_TRANSACTIONS, + SEARCH, +} + +export interface LookupTransactionsOptions extends LookupFilterOptionsBase { + includeMined?: boolean; + type?: LookupTransactionType; + searchType?: "address" | "name" | "metadata"; +} + +export interface LookupTransactionsResponse extends LookupResponseBase { + transactions: KristTransaction[]; +} + +/** Maps a transaction lookup type to its appropriate API endpoint. */ +function getTransactionLookupRoute( + addresses: string[] | undefined, + opts: LookupTransactionsOptions +): string { + // Combine an address array into comma-separated values + const addressList = addresses && addresses.length > 0 + ? encodeURIComponent(addresses.join(",")) + : ""; + + switch (opts.type ?? LookupTransactionType.TRANSACTIONS) { + case LookupTransactionType.TRANSACTIONS: + return "lookup/transactions/" + addressList; + case LookupTransactionType.NAME_HISTORY: + return "lookup/names/" + addressList + "/history"; + case LookupTransactionType.NAME_TRANSACTIONS: + return "lookup/names/" + addressList + "/transactions"; + case LookupTransactionType.SEARCH: + return "search/extended/results/transactions/" + opts.searchType; + } +} + +export async function lookupTransactions( + addresses: string[] | undefined, + opts: LookupTransactionsOptions +): Promise { + const qs = getFilterOptionsQuery(opts); + if (opts.includeMined) qs.append("includeMined", ""); + + const type = opts.type ?? LookupTransactionType.TRANSACTIONS; + const route = getTransactionLookupRoute(addresses, opts); + + // For searches, append the search query as a query parameter + if (type === LookupTransactionType.SEARCH) + qs.append("q", addresses?.[0] || ""); + + return await api.get(route + "?" + qs); +} + +// ============================================================================= +// Names +// ============================================================================= +export type SortableNameFields = "name" | "owner" | "original_owner" + | "registered" | "updated" | "a" | "unpaid"; +export type LookupNamesOptions = LookupFilterOptionsBase; + +export interface LookupNamesResponse extends LookupResponseBase { + names: KristName[]; +} + +export async function lookupNames( + addresses: string[] | undefined, + opts: LookupNamesOptions +): Promise { + const qs = getFilterOptionsQuery(opts); + return await api.get( + "lookup/names/" + + (addresses && addresses.length > 0 + ? encodeURIComponent(addresses.join(",")) + : "") + + "?" + qs + ); +} diff --git a/src/krist/api/names.ts b/src/krist/api/names.ts new file mode 100644 index 0000000..d3c518b --- /dev/null +++ b/src/krist/api/names.ts @@ -0,0 +1,88 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { TranslatedError } from "@utils/i18n"; + +import * as api from "."; +import { AuthFailedError } from "@api/AuthFailed"; + +import { ValidDecryptedAddresses, Wallet, decryptWallet } from "@wallets"; + +import Debug from "debug"; +const debug = Debug("kristweb:api-names"); + +export type ProgressCallback = () => void; + +interface PartialName { + name: string; + owner: string; +} + +/** Convert auth_failed errors to AuthFailedError so the modal can display the + * correct address. */ +async function wrapAuthFailedError(name: PartialName, err: Error) { + if (err.message === "auth_failed") + throw new AuthFailedError(err.message, name.owner); + else + throw err; +} + +export async function transferNames( + decryptedAddresses: ValidDecryptedAddresses, + names: PartialName[], + recipient: string, + onProgress?: ProgressCallback +): Promise { + for (const name of names) { + const { privatekey } = decryptedAddresses[name.owner]; + const onError = wrapAuthFailedError.bind(undefined, name); + + debug("transferring name %s from %s to %s", + name.name, name.owner, recipient); + + await api.post( + `/names/${encodeURIComponent(name.name)}/transfer`, + { address: recipient, privatekey } + ).catch(onError); + + onProgress?.(); + } +} + +export async function updateNames( + decryptedAddresses: ValidDecryptedAddresses, + names: PartialName[], + aRecord?: string | null, + onProgress?: ProgressCallback +): Promise { + for (const name of names) { + const { privatekey } = decryptedAddresses[name.owner]; + const onError = wrapAuthFailedError.bind(undefined, name); + + debug("updating name %s a record to %s", name.name, aRecord); + + await api.post( + `/names/${encodeURIComponent(name.name)}/update`, + { a: aRecord?.trim() || null, privatekey } + ).catch(onError); + + onProgress?.(); + } +} + +export async function purchaseName( + masterPassword: string, + wallet: Wallet, + name: string +): Promise { + // Attempt to decrypt the wallet to get the privatekey + const decrypted = await decryptWallet(masterPassword, wallet); + if (!decrypted) + throw new TranslatedError("namePurchase.errorWalletDecrypt"); + const { privatekey } = decrypted; + + await api.post( + `names/${encodeURIComponent(name)}`, + { privatekey } + ); +} diff --git a/src/krist/api/search.ts b/src/krist/api/search.ts new file mode 100644 index 0000000..70599b9 --- /dev/null +++ b/src/krist/api/search.ts @@ -0,0 +1,61 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { KristAddress, KristBlock, KristName, KristTransaction } from "./types"; +import * as api from "."; + +export interface SearchQueryMatch { + originalQuery: string; + matchedAddress: boolean; + matchedName: boolean; + matchedBlock: boolean; + matchedTransaction: boolean; + strippedName: string; +} + +export interface SearchResult { + query: SearchQueryMatch; + + matches: { + exactAddress: KristAddress | false; + exactName: KristName | false; + exactBlock: KristBlock | false; + exactTransaction: KristTransaction | false; + }; +} + +export interface SearchExtendedResult { + query: SearchQueryMatch; + + matches: { + transactions: { + addressInvolved: number | false; + nameInvolved: number | false; + metadata: number | false; + }; + }; +} + +export async function search(query?: string): Promise { + if (!query) return; + + return api.get( + "search?q=" + encodeURIComponent(query), + + // Don't show the rate limit notification if it is hit, a message will be + // shown in the search box instead + { ignoreRateLimit: true } + ); +} + +export async function searchExtended(query?: string): Promise { + if (!query || query.length < 3) return; + + return api.get( + "search/extended?q=" + encodeURIComponent(query), + + // Don't show the rate limit notification if it is hit, a message will be + // shown in the search box instead + { ignoreRateLimit: true } + ); +} diff --git a/src/krist/api/transactions.ts b/src/krist/api/transactions.ts new file mode 100644 index 0000000..620e85c --- /dev/null +++ b/src/krist/api/transactions.ts @@ -0,0 +1,37 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { TranslatedError } from "@utils/i18n"; + +import { KristTransaction } from "./types"; +import * as api from "."; + +import { Wallet, decryptWallet } from "@wallets"; + +interface MakeTransactionResponse { + transaction: KristTransaction; +} + +export async function makeTransaction( + masterPassword: string, + from: Wallet, + to: string, + amount: number, + metadata?: string +): Promise { + // Attempt to decrypt the wallet to get the privatekey + const decrypted = await decryptWallet(masterPassword, from); + if (!decrypted) + throw new TranslatedError("sendTransaction.errorWalletDecrypt"); + const { privatekey } = decrypted; + + const { transaction } = await api.post( + "/transactions", + { + privatekey, to, amount, + metadata: metadata || undefined // Clean up empty strings + } + ); + + return transaction; +} diff --git a/src/krist/api/types.ts b/src/krist/api/types.ts new file mode 100644 index 0000000..bc86c73 --- /dev/null +++ b/src/krist/api/types.ts @@ -0,0 +1,155 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +export interface KristAddress { + address: string; + + balance: number; + totalin?: number; + totalout?: number; + + firstseen: string; +} + +export type KristTransactionType = "unknown" | "mined" | "name_purchase" + | "name_a_record" | "name_transfer" | "transfer"; +export interface KristTransaction { + id: number; + from: string | null; + to: string; + value: number; + time: string; + name?: string; + metadata?: string; + sent_name?: string; + sent_metaname?: string; + type: KristTransactionType; +} + +export interface KristBlock { + height: number; + address: string; + hash?: string | null; + short_hash?: string | null; + value: number; + difficulty: number; + time: string; +} + +export interface KristName { + name: string; + owner: string; + original_owner?: string; + registered: string; + updated?: string | null; + a?: string | null; + unpaid: number; +} + +export interface KristWorkDetailed { + work: number; + unpaid: number; + + base_value: number; + block_value: number; + + decrease: { + value: number; + blocks: number; + reset: number; + }; +} + +export interface KristConstants { + wallet_version: number; + nonce_max_size: number; + name_cost: number; + min_work: number; + max_work: number; + work_factor: number; + seconds_per_block: number; +} +export const DEFAULT_CONSTANTS: KristConstants = { + wallet_version: 16, + nonce_max_size: 24, + name_cost: 500, + min_work: 100, + max_work: 100000, + work_factor: 0.025, + seconds_per_block: 60 +}; + +export interface KristCurrency { + address_prefix: string; + name_suffix: string; + currency_name: string; + currency_symbol: string; +} +export const DEFAULT_CURRENCY: KristCurrency = { + address_prefix: "k", name_suffix: "kst", + currency_name: "Krist", currency_symbol: "KST" +}; + +export interface KristMOTDBase { + motd: string; + motdSet: Date; + + miningEnabled: boolean; + debugMode: boolean; +} +export const DEFAULT_MOTD_BASE: KristMOTDBase = { + motd: "", + motdSet: new Date(), + miningEnabled: true, + debugMode: false +}; + +export interface KristMOTD { + motd: string; + motd_set: string; + + public_url: string; + mining_enabled: boolean; + debug_mode: boolean; + + last_block?: KristBlock; + package: KristMOTDPackage; + constants: KristConstants; + currency: KristCurrency; +} + +export interface KristMOTDPackage { + name: string; + version: string; + author: string; + licence: string; + repository: string; +} + +export const DEFAULT_PACKAGE = { + "name": "krist", + "version": "0.0.0", + "author": "Lemmmy", + "licence": "GPL-3.0", + "repository": "https://github.com/tmpim/Krist" +}; + +export type APIResponse> = T & { + ok: boolean; + error?: string; + parameter?: string; +} + +export type WSConnectionState = "connected" | "disconnected" | "connecting"; +export type WSSubscriptionLevel = "blocks" | "ownBlocks" | "transactions" | "ownTransactions" | "names" | "ownNames" | "motd"; +export type WSEvent = "block" | "transaction" | "name" | "motd"; +export interface WSIncomingMessage { + id?: number; + ok?: boolean; + error?: string; + type?: "keepalive" | "hello" | "event"; + + event?: WSEvent; + + [key: string]: any; +} diff --git a/src/krist/contacts/Contact.ts b/src/krist/contacts/Contact.ts new file mode 100644 index 0000000..cc3a5db --- /dev/null +++ b/src/krist/contacts/Contact.ts @@ -0,0 +1,23 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +export interface Contact { + // UUID for this contact + id: string; + + address: string; + label?: string; + isName?: boolean; +} + +export interface ContactMap { [key: string]: Contact } + +/** Properties of Contact that are required to create a new contact. */ +export type ContactNewKeys = "address" | "label" | "isName"; +export type ContactNew = Pick; + +/** Properties of Contact that are allowed to be updated. */ +export type ContactUpdatableKeys = "address" | "label" | "isName"; +export const CONTACT_UPDATABLE_KEYS: ContactUpdatableKeys[] + = ["address", "label", "isName"]; +export type ContactUpdatable = Pick; diff --git a/src/krist/contacts/contactStorage.ts b/src/krist/contacts/contactStorage.ts new file mode 100644 index 0000000..c5a481c --- /dev/null +++ b/src/krist/contacts/contactStorage.ts @@ -0,0 +1,82 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { store } from "@app"; +import * as actions from "@actions/ContactsActions"; + +import { TranslatedError } from "@utils/i18n"; + +import { Contact, ContactMap } from "."; +import { broadcastDeleteContact } from "@global/StorageBroadcast"; + +import Debug from "debug"; +const debug = Debug("kristweb:contact-storage"); + +/** Get the local storage key for a given contact. */ +export function getContactKey(contact: Contact | string): string { + const id = typeof contact === "string" ? contact : contact.id; + return `contact2-${id}`; +} + +/** Extract a contact ID from a local storage key. */ +const contactKeyRegex = /^contact2-([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})$/; +export function extractContactKey(key: string): [string, string] | undefined { + const [, id] = contactKeyRegex.exec(key) || []; + return id ? [key, id] : undefined; +} + +export function parseContact(id: string, data: string | null): Contact { + if (data === null) // localStorage key was missing + throw new TranslatedError("masterPassword.walletStorageCorrupt"); + + try { + const contact: Contact = JSON.parse(data); + + // Validate the contact data actually makes sense + if (!contact || !contact.id || contact.id !== id) + throw new TranslatedError("masterPassword.walletStorageCorrupt"); + + return contact; + } catch (e) { + console.error(e); + + if (e.name === "SyntaxError") // Invalid JSON + throw new TranslatedError("masterPassword.errorStorageCorrupt"); + else throw e; // Unknown error + } +} + +/** Loads all available contacts from local storage. */ +export function loadContacts(): ContactMap { + // Find all `contact2` keys from local storage + const keysToLoad = Object.keys(localStorage) + .map(extractContactKey) + .filter(k => k !== undefined) as [string, string][]; + + const contacts = keysToLoad.map(([key, id]) => parseContact(id, localStorage.getItem(key))); + + // Convert to map with contact IDs + const contactMap: ContactMap = contacts.reduce((obj, c) => ({ ...obj, [c.id]: c }), {}); + + return contactMap; +} + +/** Saves a contact to local storage. */ +export function saveContact(contact: Contact): void { + const key = getContactKey(contact); + debug("saving contact key %s", key); + + const serialised = JSON.stringify(contact); + localStorage.setItem(key, serialised); +} + +/** Deletes a contact, removing it from local storage and dispatching the change + * to the Redux store. */ +export function deleteContact(contact: Contact): void { + const key = getContactKey(contact); + localStorage.removeItem(key); + + broadcastDeleteContact(contact.id); // Broadcast changes to other tabs + + store.dispatch(actions.removeContact(contact.id)); +} diff --git a/src/krist/contacts/functions/addContact.ts b/src/krist/contacts/functions/addContact.ts new file mode 100644 index 0000000..90d175f --- /dev/null +++ b/src/krist/contacts/functions/addContact.ts @@ -0,0 +1,36 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { v4 as uuid } from "uuid"; + +import { store } from "@app"; +import * as actions from "@actions/ContactsActions"; + +import { Contact, ContactNew, saveContact } from ".."; +import { broadcastAddContact } from "@global/StorageBroadcast"; + +/** + * Adds a new contact, saving it to locale storage, and dispatching the changes + * to the Redux store. + * + * @param contact - The information for the new contact. + */ +export function addContact(contact: ContactNew): Contact { + const id = uuid(); + + const newContact = { + id, + address: contact.address, + label: contact.label?.trim() || undefined, + isName: contact.isName + }; + + // Save the contact to local storage + saveContact(newContact); + broadcastAddContact(newContact.id); // Broadcast changes to other tabs + + // Dispatch the changes to the Redux store + store.dispatch(actions.addContact(newContact)); + + return newContact; +} diff --git a/src/krist/contacts/functions/editContact.ts b/src/krist/contacts/functions/editContact.ts new file mode 100644 index 0000000..ef7b9e1 --- /dev/null +++ b/src/krist/contacts/functions/editContact.ts @@ -0,0 +1,62 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { store } from "@app"; +import * as actions from "@actions/ContactsActions"; + +import { Contact, ContactNew, saveContact } from ".."; +import { broadcastEditContact } from "@global/StorageBroadcast"; + +/** + * Edits a contact, saving it to local storage, and dispatching the changes to + * the Redux store. + * + * @param contact - The old contact information. + * @param updated - The new contact information. + */ +export function editContact( + contact: Contact, + updated: ContactNew +): void { + const finalContact = { + ...contact, + address: updated.address, + label: updated.label?.trim() || "", + isName: updated.isName + }; + + // Save the updated contact to local storage + saveContact(finalContact); + broadcastEditContact(contact.id); // Broadcast changes to other tabs + + // Dispatch the changes to the Redux store + store.dispatch(actions.updateContact({ id: contact.id, contact: finalContact })); +} + +/** + * Edits just a contact's label. This can be set to an empty string to be + * removed, or to `undefined` to use the existing value. + * + * @param contact - The old contact information. + * @param label - The new contact label. + */ +export function editContactLabel( + contact: Contact, + label: string | "" | undefined +): void { + const updatedLabel = label?.trim() === "" + ? undefined + : (label?.trim() || contact.label); + + const finalContact = { + ...contact, + label: updatedLabel + }; + + // Save the updated contact to local storage + saveContact(finalContact); + broadcastEditContact(contact.id); // Broadcast changes to other tabs + + // Dispatch the changes to the Redux store + store.dispatch(actions.updateContact({ id: contact.id, contact: finalContact })); +} diff --git a/src/krist/contacts/index.ts b/src/krist/contacts/index.ts new file mode 100644 index 0000000..3854795 --- /dev/null +++ b/src/krist/contacts/index.ts @@ -0,0 +1,8 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +export * from "./Contact"; +export * from "./functions/addContact"; +export * from "./functions/editContact"; +export * from "./contactStorage"; +export * from "./utils"; diff --git a/src/krist/contacts/utils.ts b/src/krist/contacts/utils.ts new file mode 100644 index 0000000..2942695 --- /dev/null +++ b/src/krist/contacts/utils.ts @@ -0,0 +1,32 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useSelector, shallowEqual } from "react-redux"; +import { RootState } from "@store"; + +import { Contact, ContactMap } from "."; + +export type ContactAddressMap = Record; + +export interface ContactsHookResponse { + contacts: ContactMap; + contactAddressMap: ContactAddressMap; + + contactAddressList: string[]; + joinedContactAddressList: string; +} + +/** Hook that fetches the contacts from the Redux store. */ +export function useContacts(): ContactsHookResponse { + const contacts = useSelector((s: RootState) => s.contacts.contacts, shallowEqual); + const contactAddressMap = Object.values(contacts) + .reduce((o, contact) => ({ ...o, [contact.address]: contact }), {}); + + const contactAddressList = Object.keys(contactAddressMap); + const joinedContactAddressList = contactAddressList.join(","); + + return { + contacts, contactAddressMap, + contactAddressList, joinedContactAddressList + }; +} diff --git a/src/krist/wallets/Wallet.ts b/src/krist/wallets/Wallet.ts new file mode 100644 index 0000000..66eeb24 --- /dev/null +++ b/src/krist/wallets/Wallet.ts @@ -0,0 +1,48 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { WalletFormatName } from "."; + +export interface Wallet { + // UUID for this wallet + id: string; + + // User assignable data + label?: string; + category?: string; + + // Login info + encPassword: string; // Encrypted with master password, decrypted on-demand + encPrivatekey: string; // The password with the password + wallet format applied + username?: string; + format: WalletFormatName; + + // Fetched from API + address: string; + balance?: number; + names?: number; + firstSeen?: string; + lastSynced?: string; + + dontSave?: boolean; // Used to avoid saving when syncing +} + +export interface WalletMap { [key: string]: Wallet } + +/** Properties of Wallet that are required to create a new wallet. */ +export type WalletNewKeys = "label" | "category" | "username" | "format" | "dontSave"; +export type WalletNew = Pick; + +/** Properties of Wallet that are allowed to be updated. */ +export type WalletUpdatableKeys + = "label" | "category" | "encPassword" | "encPrivatekey" | "username" | "format" | "address"; +export const WALLET_UPDATABLE_KEYS: WalletUpdatableKeys[] + = ["label", "category", "encPassword", "encPrivatekey", "username", "format", "address"]; +export type WalletUpdatable = Pick; + +/** Properties of Wallet that are allowed to be synced. */ +export type WalletSyncableKeys + = "balance" | "names" | "firstSeen" | "lastSynced"; +export const WALLET_SYNCABLE_KEYS: WalletSyncableKeys[] + = ["balance", "names", "firstSeen", "lastSynced"]; +export type WalletSyncable = Pick; diff --git a/src/krist/wallets/functions/addWallet.ts b/src/krist/wallets/functions/addWallet.ts new file mode 100644 index 0000000..4a6779d --- /dev/null +++ b/src/krist/wallets/functions/addWallet.ts @@ -0,0 +1,67 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { v4 as uuid } from "uuid"; + +import { store } from "@app"; +import * as actions from "@actions/WalletsActions"; + +import { aesGcmEncrypt } from "@utils/crypto"; + +import { Wallet, WalletNew, saveWallet, syncWallet, calculateAddress } from ".."; +import { broadcastAddWallet } from "@global/StorageBroadcast"; + +/** + * Adds a new wallet, encrypting its privatekey and password, saving it to + * local storage, and dispatching the changes to the Redux store. + * + * @param addressPrefix - The prefixes of addresses on this node. + * @param masterPassword - The master password used to encrypt the wallet + * password and privatekey. + * @param wallet - The information for the new wallet. + * @param password - The password of the new wallet. + * @param save - Whether or not to save this wallet to local storage. + */ +export async function addWallet( + addressPrefix: string, + masterPassword: string, + wallet: WalletNew, + password: string, + save: boolean +): Promise { + // Calculate the privatekey and address for the given wallet format + const { privatekey, address } = await calculateAddress(addressPrefix, wallet, password); + + const id = uuid(); + + // Encrypt the password and privatekey. These will be decrypted on-demand. + const encPassword = await aesGcmEncrypt(password, masterPassword); + const encPrivatekey = await aesGcmEncrypt(privatekey, masterPassword); + + const newWallet = { + id, address, + + label: wallet.label?.trim() || undefined, // clean up empty strings + category: wallet.category?.trim() || undefined, + + username: wallet.username, + encPassword, + encPrivatekey, + format: wallet.format, + + ...(save ? {} : { dontSave: true }) + }; + + // Save the wallet to local storage if wanted + if (save) { + saveWallet(newWallet); + broadcastAddWallet(newWallet.id); // Broadcast changes to other tabs + } + + // Dispatch the changes to the redux store + store.dispatch(actions.addWallet(newWallet)); + + syncWallet(newWallet); + + return newWallet; +} diff --git a/src/krist/wallets/functions/decryptWallet.ts b/src/krist/wallets/functions/decryptWallet.ts new file mode 100644 index 0000000..d4c6b20 --- /dev/null +++ b/src/krist/wallets/functions/decryptWallet.ts @@ -0,0 +1,71 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { aesGcmDecrypt } from "@utils/crypto"; + +import { WalletAddressMap } from ".."; + +export interface EncryptedWallet { encPassword: string; encPrivatekey: string } +export interface DecryptedWallet { password: string; privatekey: string } + +/** Decrypts a wallet's password and privatekey. */ +export async function decryptWallet( + masterPassword: string, + wallet: EncryptedWallet +): Promise { + try { + const decPassword = await aesGcmDecrypt(wallet.encPassword, masterPassword); + const decPrivatekey = await aesGcmDecrypt(wallet.encPrivatekey, masterPassword); + + return { password: decPassword, privatekey: decPrivatekey }; + } catch (e) { + // OperationError usually means decryption failure + if (e.name === "OperationError") return null; + + console.error(e); + return null; + } +} + +export const DecryptErrorGone = Symbol("KWDecryptErrorGone"); +export const DecryptErrorFailed = Symbol("KWDecryptErrorFailed"); + +// TODO: use these in decryptWallet too (will require some refactoring) +export type DecryptResult = DecryptedWallet + | typeof DecryptErrorGone + | typeof DecryptErrorFailed; + +export type DecryptedAddresses = Record; +export type ValidDecryptedAddresses = Record; + +/** Decrypts an array of wallets by address at once. */ +export async function decryptAddresses( + masterPassword: string, + walletAddressMap: WalletAddressMap, + addresses: string[] +): Promise { + // Ensure the array of addresses is unique + const uniqAddresses = [...new Set(addresses)]; + const out: DecryptedAddresses = {}; + + // Try to decrypt each address + for (const address of uniqAddresses) { + // Find the wallet by address and verify it actually exists + const wallet = walletAddressMap[address]; + if (!wallet) { + out[address] = DecryptErrorGone; + continue; + } + + // Decrypt the wallet, erroring if it fails + const dec = await decryptWallet(masterPassword, wallet); + if (!dec) { + out[address] = DecryptErrorFailed; + continue; + } + + out[address] = dec; + } + + return out; +} diff --git a/src/krist/wallets/functions/editWallet.ts b/src/krist/wallets/functions/editWallet.ts new file mode 100644 index 0000000..a8019d1 --- /dev/null +++ b/src/krist/wallets/functions/editWallet.ts @@ -0,0 +1,95 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { store } from "@app"; +import * as actions from "@actions/WalletsActions"; + +import { aesGcmEncrypt } from "@utils/crypto"; + +import { Wallet, WalletNew, saveWallet, syncWallet, calculateAddress } from ".."; +import { broadcastEditWallet } from "@global/StorageBroadcast"; + +/** + * Edits a new wallet, encrypting its privatekey and password, saving it to + * local storage, and dispatching the changes to the Redux store. + * + * @param addressPrefix - The prefixes of addresses on this node. + * @param masterPassword - The master password used to encrypt the wallet + * password and privatekey. + * @param wallet - The old wallet information. + * @param updated - The new wallet information. + * @param password - The password of the updated wallet. + */ +export async function editWallet( + addressPrefix: string, + masterPassword: string, + wallet: Wallet, + updated: WalletNew, + password: string +): Promise { + // Calculate the privatekey and address for the given wallet format + const { privatekey, address } = await calculateAddress(addressPrefix, updated, password); + + // Encrypt the password and privatekey. These will be decrypted on-demand. + const encPassword = await aesGcmEncrypt(password, masterPassword); + const encPrivatekey = await aesGcmEncrypt(privatekey, masterPassword); + + const finalWallet = { + ...wallet, + + label: updated.label?.trim() || "", + category: updated.category?.trim() || "", + + address, + username: updated.username, + encPassword, + encPrivatekey, + format: updated.format + }; + + // Save the updated wallet to local storage + saveWallet(finalWallet); + broadcastEditWallet(wallet.id); // Broadcast changes to other tabs + + // Dispatch the changes to the redux store + store.dispatch(actions.updateWallet(wallet.id, finalWallet)); + + syncWallet(finalWallet); +} + +/** + * Edits just a wallet's label and category. They can be set to an empty + * string to be removed, or to `undefined` to use the existing value. + * + * @param wallet - The old wallet information. + * @param label - The new wallet label. + * @param category - The new wallet category. + */ +export function editWalletLabel( + wallet: Wallet, + label: string | "" | undefined, + category?: string | "" | undefined +): void { + const updatedLabel = label?.trim() === "" + ? undefined + : (label?.trim() || wallet.label); + const updatedCategory = category?.trim() === "" + ? undefined + : (category?.trim() || wallet.category); + + const finalWallet = { + ...wallet, + label: updatedLabel, + category: updatedCategory + }; + + // Save the updated wallet to local storage + saveWallet(finalWallet); + broadcastEditWallet(wallet.id); // Broadcast changes to other tabs + + // Dispatch the changes to the redux store + store.dispatch(actions.updateWallet(wallet.id, finalWallet)); + + syncWallet(finalWallet); +} + diff --git a/src/krist/wallets/functions/recalculateWallets.ts b/src/krist/wallets/functions/recalculateWallets.ts new file mode 100644 index 0000000..6bb65dc --- /dev/null +++ b/src/krist/wallets/functions/recalculateWallets.ts @@ -0,0 +1,69 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { store } from "@app"; +import * as actions from "@actions/WalletsActions"; + +import { WalletMap, decryptWallet, saveWallet, calculateAddress } from ".."; + +import { Mutex } from "async-mutex"; + +import Debug from "debug"; +const debug = Debug("kristweb:wallet"); + +const recalculationMutex = new Mutex(); + +/** If the address prefix changes (e.g. swapping sync node), and we are + * decrypted, recalculate all the addresses with the new prefix. If the prefix + * is unchanged, this does nothing. The changes will be dispatched to the + * Redux store. */ +export async function recalculateWallets(masterPassword: string, wallets: WalletMap, addressPrefix: string): Promise { + const lastPrefix = localStorage.getItem("lastAddressPrefix") || "k"; + if (addressPrefix === lastPrefix) return; + debug("address prefix changed from %s to %s, waiting for mutex...", lastPrefix, addressPrefix); + + // Don't allow more than one recalculation at a time + await recalculationMutex.runExclusive(async () => { + const lastPrefix = localStorage.getItem("lastAddressPrefix") || "k"; + if (addressPrefix === lastPrefix) { + debug("prefix was already reset while we were calculating"); + return; + } + + debug("recalculating all wallets", lastPrefix, addressPrefix); + + // Map of wallet IDs -> new addresses + const updatedWallets: Record = {}; + + // Recalculate all the wallets + for (const id in wallets) { + // Prepare the wallet for recalculation + const wallet = wallets[id]; + const decrypted = await decryptWallet(masterPassword, wallet); + if (!decrypted) + throw new Error(`couldn't decrypt wallet ${wallet.id}!`); + + // Calculate the new address + const { address } = await calculateAddress(addressPrefix, wallet, decrypted.password); + + if (wallet.address === address) continue; + + // Prepare the change to be applied + debug("old address: %s - new address: %s", wallet.address, address); + updatedWallets[wallet.id] = address; + } + + // Now that we know everything converted successfully, save the updated + // wallets to local storage + for (const id in wallets) { + const wallet = wallets[id]; + saveWallet({ ...wallet, address: updatedWallets[wallet.id] }); + } + + // Apply all the changes to the Redux store + store.dispatch(actions.recalculateWallets(updatedWallets)); + + debug("recalculation done, saving prefix"); + localStorage.setItem("lastAddressPrefix", addressPrefix); + }); +} diff --git a/src/krist/wallets/functions/syncWallets.ts b/src/krist/wallets/functions/syncWallets.ts new file mode 100644 index 0000000..e4d739a --- /dev/null +++ b/src/krist/wallets/functions/syncWallets.ts @@ -0,0 +1,100 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { store } from "@app"; +import * as actions from "@actions/WalletsActions"; + +import { KristAddressWithNames, lookupAddresses } from "../../api/lookup"; + +import { Wallet, saveWallet } from ".."; + +import Debug from "debug"; +const debug = Debug("kristweb:sync-wallets"); + +function syncWalletProperties( + wallet: Wallet, + address: KristAddressWithNames | null, + syncTime: Date +): Wallet { + if (address) { + return { + ...wallet, + ...(address.balance !== undefined ? { balance: address.balance } : {}), + ...(address.names !== undefined ? { names: address.names } : {}), + ...(address.firstseen !== undefined ? { firstSeen: address.firstseen } : {}), + lastSynced: syncTime.toISOString() + }; + } else { + // Wallet was unsyncable (address not found), clear its properties + return { + ...wallet, + balance: undefined, + names: undefined, + firstSeen: undefined, + lastSynced: syncTime.toISOString() + }; + } +} + +/** Sync the data for a single wallet from the sync node, save it to local + * storage, and dispatch the change to the Redux store. */ +export async function syncWallet( + wallet: Wallet, + dontSave?: boolean +): Promise { + // Fetch the data from the sync node (e.g. balance) + const { address } = wallet; + const lookupResults = await lookupAddresses([address], true); + + debug("synced individual wallet %s (%s): %o", wallet.id, wallet.address, lookupResults); + + const kristAddress = lookupResults[address]; + syncWalletUpdate(wallet, kristAddress, dontSave); +} + +/** Given an already synced wallet, save it to local storage, and dispatch the + * change to the Redux store. */ +export function syncWalletUpdate( + wallet: Wallet, + address: KristAddressWithNames | null, + dontSave?: boolean +): void { + const syncTime = new Date(); + const updatedWallet = syncWalletProperties(wallet, address, syncTime); + + // Save the wallet to local storage, unless this was an external sync action + if (!dontSave) saveWallet(updatedWallet); + + if (address) { + // Wallet synced successfully, dispatch the change to the Redux store + store.dispatch(actions.syncWallet(wallet.id, updatedWallet)); + } else { + // Wallet failed to sync, clear its properties + store.dispatch(actions.unsyncWallet(wallet.id, syncTime)); + } +} + +/** Sync the data for all the wallets from the sync node, save it to local + * storage, and dispatch the changes to the Redux store. */ +export async function syncWallets(): Promise { + const { wallets } = store.getState().wallets; + + const syncTime = new Date(); + + // Fetch all the data from the sync node (e.g. balances) + const addresses = Object.values(wallets).map(w => w.address); + const lookupResults = await lookupAddresses(addresses, true); + + // Create a WalletMap with the updated wallet properties + const updatedWallets = Object.entries(wallets).map(([_, wallet]) => { + const kristAddress = lookupResults[wallet.address]; + if (!kristAddress) return wallet; // Skip unsyncable wallets + return syncWalletProperties(wallet, kristAddress, syncTime); + }).reduce((o, wallet) => ({ ...o, [wallet.id]: wallet }), {}); + + // Save the wallets to local storage (unless dontSave is set) + Object.values(updatedWallets).forEach(w => saveWallet(w as Wallet)); + + // Dispatch the changes to the Redux store + store.dispatch(actions.syncWallets(updatedWallets)); +} diff --git a/src/krist/wallets/index.ts b/src/krist/wallets/index.ts new file mode 100644 index 0000000..52ac798 --- /dev/null +++ b/src/krist/wallets/index.ts @@ -0,0 +1,13 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +export * from "./Wallet"; +export * from "./walletFormats"; +export * from "./functions/addWallet"; +export * from "./functions/editWallet"; +export * from "./functions/syncWallets"; +export * from "./functions/decryptWallet"; +export * from "./functions/recalculateWallets"; +export * from "./masterPassword"; +export * from "./walletStorage"; +export * from "./utils"; diff --git a/src/krist/wallets/masterPassword.ts b/src/krist/wallets/masterPassword.ts new file mode 100644 index 0000000..c6e165e --- /dev/null +++ b/src/krist/wallets/masterPassword.ts @@ -0,0 +1,84 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useSelector, shallowEqual } from "react-redux"; +import { RootState } from "@store"; + +import { toHex } from "@utils"; +import { aesGcmEncrypt, aesGcmDecrypt } from "@utils/crypto"; + +import { store } from "@app"; +import * as actions from "@actions/MasterPasswordActions"; + +import { TranslatedError } from "@utils/i18n"; + +/** Verifies that the given master password is correct, and dispatches the + * auth action to the Redux store. */ +export async function authMasterPassword( + salt: string | undefined, + tester: string | undefined, + password: string +): Promise { + if (!password) + throw new TranslatedError("masterPassword.errorPasswordRequired"); + if (!salt || !tester) + throw new TranslatedError("masterPassword.errorPasswordUnset"); + + try { + // Attempt to decrypt the tester with the given password + const testerDec = await aesGcmDecrypt(tester, password); + + // Verify that the decrypted tester is equal to the salt, if not, the + // provided master password is incorrect. + if (testerDec !== salt) + throw new TranslatedError("masterPassword.errorPasswordIncorrect"); + } catch (e) { + // OperationError usually means decryption failure + if (e.name === "OperationError") + throw new TranslatedError("masterPassword.errorPasswordIncorrect"); + else throw e; + } + + // Dispatch the auth state changes to the Redux store + store.dispatch(actions.authMasterPassword(password)); +} + +/** Generates a salt and tester, sets the master password, and dispatches the + * action to the Redux store. */ +export async function setMasterPassword(password: string): Promise { + if (!password) + throw new TranslatedError("masterPassword.errorPasswordRequired"); + + // Generate the salt (to be encrypted with the master password) + const salt = window.crypto.getRandomValues(new Uint8Array(32)); + const saltHex = toHex(salt); + + // Generate the encryption tester + const tester = await aesGcmEncrypt(saltHex, password); + + // Store them in local storage + localStorage.setItem("salt", saltHex); + localStorage.setItem("tester", tester); + + // Dispatch the auth state changes to the Redux store + store.dispatch(actions.setMasterPassword(saltHex, tester, password)); +} + +interface MasterPasswordHookResponse { + isAuthed?: boolean; + masterPassword?: string; + salt?: string; + tester?: string; + hasMasterPassword?: boolean; +} + +/** Hook to return the master password state. */ +export const useMasterPassword = (): MasterPasswordHookResponse => + useSelector((s: RootState) => s.masterPassword, shallowEqual); + +/** + * Hook to return just the master password. Used when the authed state is + * already known (e.g. the component was rendered within an AuthorisedAction). + */ +export const useMasterPasswordOnly = (): string | undefined => + useSelector((s: RootState) => s.masterPassword.masterPassword); diff --git a/src/krist/wallets/utils.ts b/src/krist/wallets/utils.ts new file mode 100644 index 0000000..4f9331e --- /dev/null +++ b/src/krist/wallets/utils.ts @@ -0,0 +1,84 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useSelector, shallowEqual } from "react-redux"; +import { RootState } from "@store"; + +import { Wallet, WalletNew, WalletMap, WalletFormatName, applyWalletFormat } from "."; +import { makeV2Address } from "../addressAlgo"; + +/** Finds a wallet in the wallet map by the given Krist address. */ +export function findWalletByAddress( + wallets: WalletMap, + address?: string +): Wallet | null { + if (!address) return null; + + for (const id in wallets) { + if (wallets[id].address === address) { + return wallets[id]; + } + } + + return null; +} + +export type WalletAddressMap = Record; + +export interface WalletsHookResponse { + wallets: WalletMap; + walletAddressMap: WalletAddressMap; + + addressList: string[]; + joinedAddressList: string; +} + +/** Hook that fetches the wallets from the Redux store. */ +export function useWallets(): WalletsHookResponse { + const wallets = useSelector((s: RootState) => s.wallets.wallets, shallowEqual); + const walletAddressMap = Object.values(wallets) + .reduce((o, wallet) => ({ ...o, [wallet.address]: wallet }), {}); + + // A cheap address list used for deep comparison. It's totally okay to assume + // this list will only change when the addresses will change, as since ES2015, + // object ordering is _basically_ consistent: + // https://stackoverflow.com/a/5525820/1499974 + // https://stackoverflow.com/a/38218582/1499974 + // https://stackoverflow.com/a/23202095/1499974 + const addressList = Object.keys(walletAddressMap); + const joinedAddressList = addressList.join(","); + + return { wallets, walletAddressMap, addressList, joinedAddressList }; +} + +/** Almost anywhere you'd want to apply a wallet format, you'd also want to + * calculate the v2 address, so just do both at once! */ +export async function calculateAddress( + addressPrefix: string, + walletOrFormat: Wallet | WalletNew | WalletFormatName | undefined, + password: string, + username?: string +): Promise<{ + privatekey: string; + address: string; +}> { + if (walletOrFormat === undefined || typeof walletOrFormat === "string") { + // We were passed a wallet format (or undefined, which is assumed to be + // the default format, since it's not a Wallet instance) + const format: WalletFormatName = walletOrFormat || "kristwallet"; + + const privatekey = await applyWalletFormat(format || "kristwallet", password, username); + const address = await makeV2Address(addressPrefix, privatekey); + return { privatekey, address }; + } else { + // We were passed a Wallet or WalletNew instance + if (typeof walletOrFormat !== "object" || walletOrFormat === null) + throw new Error("Missing `walletOrFormat` in `calculateAddress`!"); + + const { format, username } = walletOrFormat as WalletNew; + + const privatekey = await applyWalletFormat(format || "kristwallet", password, username); + const address = await makeV2Address(addressPrefix, privatekey); + return { privatekey, address }; + } +} diff --git a/src/krist/wallets/walletFormats.ts b/src/krist/wallets/walletFormats.ts new file mode 100644 index 0000000..e846de2 --- /dev/null +++ b/src/krist/wallets/walletFormats.ts @@ -0,0 +1,35 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { sha256 } from "@utils/crypto"; + +export interface WalletFormat { + (password: string, username?: string): Promise; +} + +export type WalletFormatName = "kristwallet" | "kristwallet_username_appendhashes" | "kristwallet_username" | "jwalelset" | "api"; +export const WALLET_FORMATS: Record = { + "kristwallet": async password => + await sha256("KRISTWALLET" + password) + "-000", + + "kristwallet_username_appendhashes": async (password, username) => + await sha256("KRISTWALLETEXTENSION" + await sha256(await sha256(username || "") + "^" + await sha256(password))) + "-000", + + "kristwallet_username": async (password, username) => + await sha256(await sha256(username || "") + "^" + await sha256(password)), + + "jwalelset": async password => + await sha256(await sha256(await sha256(await sha256(await sha256(await sha256(await sha256(await sha256(await sha256(await sha256(await sha256(await sha256(await sha256(await sha256(await sha256(await sha256(await sha256(await sha256(password)))))))))))))))))), + + "api": async password => password +}; +export const ADVANCED_FORMATS: WalletFormatName[] = [ + "kristwallet_username_appendhashes", "kristwallet_username", "jwalelset" +]; + +export const applyWalletFormat = + (format: WalletFormatName, password: string, username?: string): Promise => + WALLET_FORMATS[format](password, username); + +export const formatNeedsUsername = (format: WalletFormatName): boolean => + WALLET_FORMATS[format].length === 2; diff --git a/src/krist/wallets/walletStorage.ts b/src/krist/wallets/walletStorage.ts new file mode 100644 index 0000000..63587ad --- /dev/null +++ b/src/krist/wallets/walletStorage.ts @@ -0,0 +1,90 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { store } from "@app"; +import * as actions from "@actions/WalletsActions"; + +import { TranslatedError } from "@utils/i18n"; + +import { Wallet, WalletMap } from "."; +import { broadcastDeleteWallet } from "@global/StorageBroadcast"; + +import Debug from "debug"; +const debug = Debug("kristweb:wallet-storage"); + +/** The limit provided by the Krist server for a single address lookup. In the + * future I may implement batching for these, but for now, this seems like a + * reasonable compromise to limit wallet storage. It should also give us a fair + * upper bound for potential performance issues. */ +export const ADDRESS_LIST_LIMIT = 128; + +/** Get the local storage key for a given wallet. */ +export function getWalletKey(wallet: Wallet | string): string { + const id = typeof wallet === "string" ? wallet : wallet.id; + return `wallet2-${id}`; +} + +/** Extract a wallet ID from a local storage key. */ +const walletKeyRegex = /^wallet2-([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})$/; +export function extractWalletKey(key: string): [string, string] | undefined { + const [, id] = walletKeyRegex.exec(key) || []; + return id ? [key, id] : undefined; +} + +export function parseWallet(id: string, data: string | null): Wallet { + if (data === null) // localStorage key was missing + throw new TranslatedError("masterPassword.walletStorageCorrupt"); + + try { + const wallet: Wallet = JSON.parse(data); + + // Validate the wallet data actually makes sense + if (!wallet || !wallet.id || wallet.id !== id) + throw new TranslatedError("masterPassword.walletStorageCorrupt"); + + return wallet; + } catch (e) { + console.error(e); + + if (e.name === "SyntaxError") // Invalid JSON + throw new TranslatedError("masterPassword.errorStorageCorrupt"); + else throw e; // Unknown error + } +} + +/** Loads all available wallets from local storage. */ +export function loadWallets(): WalletMap { + // Find all `wallet2` keys from local storage + const keysToLoad = Object.keys(localStorage) + .map(extractWalletKey) + .filter(k => k !== undefined) as [string, string][]; + + const wallets = keysToLoad.map(([key, id]) => parseWallet(id, localStorage.getItem(key))); + + // Convert to map with wallet IDs + const walletMap: WalletMap = wallets.reduce((obj, w) => ({ ...obj, [w.id]: w }), {}); + + return walletMap; +} + +/** Saves a wallet to local storage, unless it has `dontSave` set. */ +export function saveWallet(wallet: Wallet): void { + if (wallet.dontSave) return; + + const key = getWalletKey(wallet); + debug("saving wallet key %s", key); + + const serialised = JSON.stringify(wallet); + localStorage.setItem(key, serialised); +} + +/** Deletes a wallet, removing it from local storage and dispatching the change + * to the Redux store. */ +export function deleteWallet(wallet: Wallet): void { + const key = getWalletKey(wallet); + localStorage.removeItem(key); + + broadcastDeleteWallet(wallet.id); // Broadcast changes to other tabs + + store.dispatch(actions.removeWallet(wallet.id)); +} diff --git a/src/layout/AppLayout.less b/src/layout/AppLayout.less new file mode 100644 index 0000000..47c383d --- /dev/null +++ b/src/layout/AppLayout.less @@ -0,0 +1,14 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +@import (reference) "../App.less"; + +.site-layout { + min-height: calc(100vh - @layout-header-height); + + margin-left: @kw-sidebar-width; + + &.site-layout-mobile { + margin-left: 0; + } +} diff --git a/src/layout/AppLayout.tsx b/src/layout/AppLayout.tsx new file mode 100644 index 0000000..6b9161e --- /dev/null +++ b/src/layout/AppLayout.tsx @@ -0,0 +1,36 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useState } from "react"; +import { Layout, Grid } from "antd"; + +import { AppHeader } from "./nav/AppHeader"; +import { Sidebar } from "./sidebar/Sidebar"; +import { AppRouter } from "../global/AppRouter"; + +import "./AppLayout.less"; + +const { useBreakpoint } = Grid; + +export function AppLayout(): JSX.Element { + const [sidebarCollapsed, setSidebarCollapsed] = useState(true); + const bps = useBreakpoint(); + + return + + + + + + {/* Fade out the background when the sidebar is open on mobile */} + {!bps.md &&
setSidebarCollapsed(true)} + />} + + + + + + ; +} diff --git a/src/layout/PageLayout.less b/src/layout/PageLayout.less new file mode 100644 index 0000000..e1f79c7 --- /dev/null +++ b/src/layout/PageLayout.less @@ -0,0 +1,32 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +@import (reference) "../App.less"; + +.page-layout { + height: 100%; + + .page-layout-header.ant-page-header { + min-height: @kw-page-header-height; + + padding-bottom: 0; + + .ant-page-header-heading-sub-title { + .ant-typography { + color: inherit; + } + } + } + + .page-layout-contents { + height: calc(100% - @kw-page-header-height); + + padding: @padding-lg; + } + + &.page-layout-no-top-padding { + .page-layout-contents { + padding-top: 0; + } + } +} diff --git a/src/layout/PageLayout.tsx b/src/layout/PageLayout.tsx new file mode 100644 index 0000000..3e3ba41 --- /dev/null +++ b/src/layout/PageLayout.tsx @@ -0,0 +1,78 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { FC, useEffect } from "react"; +import classNames from "classnames"; +import { PageHeader } from "antd"; + +import { useTranslation } from "react-i18next"; +import { useHistory } from "react-router-dom"; + +import "./PageLayout.less"; + +export type PageLayoutProps = React.HTMLProps & { + siteTitle?: string; + siteTitleKey?: string; + title?: React.ReactNode | string; + titleKey?: string; + subTitle?: React.ReactNode | string; + subTitleKey?: string; + + extra?: React.ReactNode; + noHeader?: boolean; + + className?: string; + withoutTopPadding?: boolean; + + onBack?: () => void; + backLink?: string; +} + +export const PageLayout: FC = ({ + siteTitle, siteTitleKey, + title, titleKey, + subTitle, subTitleKey, + + extra, noHeader, + + className, + withoutTopPadding, + + onBack, backLink, + + children, ...rest +}) => { + const { t } = useTranslation(); + const history = useHistory(); + + useEffect(() => { + if (siteTitle) document.title = `${siteTitle} - KristWeb`; + else if (siteTitleKey) document.title = `${t(siteTitleKey)} - KristWeb`; + }, [t, siteTitle, siteTitleKey]); + + const classes = classNames("page-layout", className, { + "page-layout-no-top-padding": withoutTopPadding + }); + + return
+ {/* Page header */} + {!noHeader && (title || titleKey) && { + if (onBack) onBack(); + else if (backLink) history.push(backLink); + else history.goBack(); + }} + />} + + {/* Page contents */} +
+ {children} +
+
; +}; diff --git a/src/layout/nav/AppHeader.less b/src/layout/nav/AppHeader.less new file mode 100644 index 0000000..fb4b0ff --- /dev/null +++ b/src/layout/nav/AppHeader.less @@ -0,0 +1,175 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +@import (reference) "../../App.less"; + +.site-header + .ant-layout { + z-index: 1; + + margin-top: @layout-header-height; +} + +.site-header { + position: fixed; + top: 0; + left: 0; + right: 0; + + display: flex; + flex-direction: row; + + border-bottom: 1px solid @kw-border-color-darker; + padding: 0; + + z-index: 2; + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + + .site-header-brand { + width: @kw-sidebar-width; + + display: flex; + align-items: center; + justify-content: center; + + // Make it full height + align-self: stretch; + // Force the search bar to shrink instead + flex-shrink: 0; + + font-size: 1.25rem; + user-select: none; + + border-right: 1px solid @kw-border-color-darker; + + a { + color: @text-color; + text-align: center; + + &:hover { + text-decoration: none; + } + } + + &-version { + margin-left: 0.25em; + + color: @text-color-secondary; + font-size: 60%; + } + + .ant-tag { + margin-left: 0.5em; + margin-right: 0; + } + } + + > .ant-menu { + background: transparent; + flex-shrink: 0; + + .ant-menu-item { + height: @layout-header-height; + + // Fix background overlapping border + border-bottom: 1px solid @kw-border-color-darker; + } + } + + .site-header-sidebar-toggle { + border-right: 1px solid @kw-border-color-darker; + } + + .site-header-search-container { + padding: 0 1rem; + width: 100%; + + display: flex; + align-items: center; + justify-content: center; + + .site-header-search { + width: 100%; + max-width: 400px; + + margin-left: auto; + + background: @kw-header-search-bg; + color: @kw-header-search-color; + border-radius: @border-radius-base; + + transition: all @animation-duration-base ease; + + &::placeholder { + color: @kw-header-search-placeholder-color; + + transition: all @animation-duration-base ease; + + font-size: @kw-header-search-placeholder-font-size; + vertical-align: middle; + } + + &:hover { + background: @kw-header-search-hover-bg; + color: @kw-header-search-hover-color; + } + + &.ant-select-focused { + background: @kw-header-search-focus-bg; + color: @kw-header-search-focus-color; + + .ant-input { + // Remove the built in focus indicator + box-shadow: none; + } + } + + .ant-input-group, .ant-input { + background: transparent; + border: none; + } + + .ant-input-group-addon { + border: none; + background: transparent; + + .ant-input-search-button { + border: none; + background: transparent; + + .anticon { + vertical-align: middle; + } + } + } + + // Make the search box full width on mobile + @media (max-width: @screen-md) { + max-width: 100%; + } + } + } + + .site-header-element { + flex: 0; + height: 50px; + + display: flex; + align-items: center; + justify-content: center; + + margin-right: 16px; + + .site-header-cymbal { + color: @text-color-secondary; + font-size: 20px; + } + } + + .site-header-settings { + border-left: 1px solid @kw-border-color-darker; + + .anticon { + margin-right: 0; + } + } +} diff --git a/src/layout/nav/AppHeader.tsx b/src/layout/nav/AppHeader.tsx new file mode 100644 index 0000000..96a6f1f --- /dev/null +++ b/src/layout/nav/AppHeader.tsx @@ -0,0 +1,71 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { Layout, Menu, Grid } from "antd"; +import { SendOutlined, DownloadOutlined, MenuOutlined, SettingOutlined } from "@ant-design/icons"; + +import { useTranslation } from "react-i18next"; + +import { Brand } from "./Brand"; +import { Search } from "./Search"; +import { ConnectionIndicator } from "./ConnectionIndicator"; +import { CymbalIndicator } from "./CymbalIndicator"; + +import { ConditionalLink } from "@comp/ConditionalLink"; + +import "./AppHeader.less"; + +const { useBreakpoint } = Grid; + +interface Props { + sidebarCollapsed: boolean; + setSidebarCollapsed: React.Dispatch>; +} + +export function AppHeader({ sidebarCollapsed, setSidebarCollapsed }: Props): JSX.Element { + const { t } = useTranslation(); + const bps = useBreakpoint(); + + return + {/* Sidebar toggle for mobile */} + {!bps.md && ( + + setSidebarCollapsed(!sidebarCollapsed)}> + + + + )} + + {/* Logo */} + {bps.md && } + + {/* Send and receive buttons */} + {bps.md && + }> + + {t("nav.send")} + + + }>{t("nav.request")} + } + + {/* Spacer to push search box to the right */} + {bps.md &&
} + + {/* Search box */} + + + {/* Connection indicator */} + + + {/* Cymbal indicator */} + + + {/* Settings button */} + + } title={t("nav.settings")}> + + + + ; +} diff --git a/src/layout/nav/Brand.tsx b/src/layout/nav/Brand.tsx new file mode 100644 index 0000000..39e6939 --- /dev/null +++ b/src/layout/nav/Brand.tsx @@ -0,0 +1,60 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { Tag } from "antd"; + +import { useTranslation } from "react-i18next"; + +import semverMajor from "semver/functions/major"; +import semverMinor from "semver/functions/minor"; +import semverPatch from "semver/functions/patch"; +import semverPrerelease from "semver/functions/prerelease"; + +import { ConditionalLink } from "@comp/ConditionalLink"; + +import packageJson from "../../../package.json"; + +declare const __GIT_VERSION__: string; + +const prereleaseTagColours: { [key: string]: string } = { + "dev": "red", + "alpha": "orange", + "beta": "blue", + "rc": "green" +}; + +const devEnvs = ["development", "local", "test"]; +const dirtyRegex = /-dirty$/; + +export function Brand(): JSX.Element { + const { t } = useTranslation(); + + const version = packageJson.version; + + const major = semverMajor(version); + const minor = semverMinor(version); + const patch = semverPatch(version); + const prerelease = semverPrerelease(version); + + // Determine if the 'dev' tag should be shown + // Replaced by webpack DefinePlugin and git-revision-webpack-plugin + const gitVersion: string = __GIT_VERSION__; + const isDirty = dirtyRegex.test(gitVersion); + const isDev = devEnvs.includes(process.env.NODE_ENV || "development"); + + // Convert semver prerelease parts to Bootstrap badge + const tagContents = isDirty || isDev ? ["dev"] : prerelease; + let tag = null; + if (tagContents && tagContents.length) { + const variant = prereleaseTagColours[tagContents[0]] || undefined; + tag = {tagContents.join(".")}; + } + + return
+ + {t("app.name")} + v{major}.{minor}.{patch} + {tag} + +
; +} diff --git a/src/layout/nav/ConnectionIndicator.less b/src/layout/nav/ConnectionIndicator.less new file mode 100644 index 0000000..8122af0 --- /dev/null +++ b/src/layout/nav/ConnectionIndicator.less @@ -0,0 +1,31 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +@import (reference) "../../App.less"; + +.connection-indicator { + vertical-align: middle; + line-height: @layout-header-height; + + &::after { + content: " "; + display: inline-block; + + width: 12px; + height: 12px; + border-radius: 50%; + + background-color: @kw-green; + box-shadow: 0 0 0 3px rgba(@kw-green, 0.3); + } + + &.connection-connecting::after { + background-color: @kw-secondary; + box-shadow: 0 0 0 3px rgba(@kw-secondary, 0.3); + } + + &.connection-disconnected::after { + background-color: @kw-red; + box-shadow: 0 0 0 3px rgba(@kw-red, 0.3); + } +} diff --git a/src/layout/nav/ConnectionIndicator.tsx b/src/layout/nav/ConnectionIndicator.tsx new file mode 100644 index 0000000..c27f274 --- /dev/null +++ b/src/layout/nav/ConnectionIndicator.tsx @@ -0,0 +1,29 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { Tooltip } from "antd"; + +import { useSelector } from "react-redux"; +import { RootState } from "@store"; +import { useTranslation } from "react-i18next"; + +import { WSConnectionState } from "@api/types"; + +import "./ConnectionIndicator.less"; + +const CONN_STATE_TOOLTIPS: Record = { + "connected": "nav.connection.online", + "disconnected": "nav.connection.offline", + "connecting": "nav.connection.connecting" +}; + +export function ConnectionIndicator(): JSX.Element { + const { t } = useTranslation(); + const connectionState = useSelector((s: RootState) => s.websocket.connectionState); + + return
+ +
+ +
; +} diff --git a/src/layout/nav/CymbalIndicator.tsx b/src/layout/nav/CymbalIndicator.tsx new file mode 100644 index 0000000..d4e0483 --- /dev/null +++ b/src/layout/nav/CymbalIndicator.tsx @@ -0,0 +1,38 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { Typography } from "antd"; +import Icon from "@ant-design/icons"; + +import { useSelector, shallowEqual } from "react-redux"; +import { RootState } from "@store"; +import { SettingsState } from "@utils/settings"; + +import { useWallets, ADDRESS_LIST_LIMIT } from "@wallets"; + +const { Text } = Typography; + +export const CymbalIconSvg = (): JSX.Element => ( + + + +); +export const CymbalIcon = (props: any): JSX.Element => + ; + +export function CymbalIndicator(): JSX.Element | null { + const allSettings: SettingsState = useSelector((s: RootState) => s.settings, shallowEqual); + const { addressList } = useWallets(); + + const on = allSettings.walletFormats + || addressList.length > ADDRESS_LIST_LIMIT; + + return on ?
+ + {addressList.length > ADDRESS_LIST_LIMIT && ( + + {addressList.length.toLocaleString()} + + )} +
: null; +} diff --git a/src/layout/nav/Search.tsx b/src/layout/nav/Search.tsx new file mode 100644 index 0000000..2cfc7bf --- /dev/null +++ b/src/layout/nav/Search.tsx @@ -0,0 +1,405 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useState, useMemo, useRef, useEffect, useCallback, MutableRefObject, Dispatch, SetStateAction, ReactNode } from "react"; +import { AutoComplete, Input } from "antd"; +import { RefSelectProps } from "antd/lib/select"; + +import { useTranslation } from "react-i18next"; +import { useHistory } from "react-router-dom"; + +import { GlobalHotKeys } from "react-hotkeys"; +import { ctrl } from "@utils"; + +import { RateLimitError } from "@api"; +import { SearchResult, search, searchExtended, SearchExtendedResult } from "@api/search"; +import { throttle, debounce } from "lodash-es"; +import LRU from "lru-cache"; + +import * as SearchResults from "./SearchResults"; + +import Debug from "debug"; +const debug = Debug("kristweb:search"); + +const SEARCH_THROTTLE = 500; +const SEARCH_RATE_LIMIT_WAIT = 5000; + +async function performAutocomplete( + query: string, + fetchResults: boolean, + fetchExtended: boolean, + waitingForRef: MutableRefObject, + setResults: (query: string, results: SearchResult | undefined) => void, + setExtendedResults: (query: string, results: SearchExtendedResult | undefined) => void, + onRateLimitHit: () => void +) { + debug("performing search for %s", query); + + // Store the most recent search query so that the results don't arrive out of + // order. + waitingForRef.current = query; + + try { + await Promise.all([ + fetchResults ? search(query).then(r => setResults(query, r)) : undefined, + fetchExtended ? searchExtended(query).then(r => setExtendedResults(query, r)) : undefined, + ]); + } catch (err) { + // Most likely error is `rate_limit_hit`: + if (err instanceof RateLimitError) onRateLimitHit(); + else console.error(err); + } +} + +export function Search(): JSX.Element { + const { t } = useTranslation(); + const history = useHistory(); + + const [value, setValue] = useState(""); + const [results, setResults] = useState(); + const [extendedResults, setExtendedResults] = useState(); + const [loading, setLoading] = useState(false); + const [rateLimitHit, setRateLimitHit] = useState(false); + const [options, setOptions] = useState<{ value: string; label: ReactNode }[]>([]); + + // The latest input that we're waiting for a network request for; this avoids + // out of order search results due to network latency + const waitingForRef = useRef(""); + + // Used to focus the search when the hotkey is received, or de-focus it when + // a search result is selected + const autocompleteRef = useRef(null); + + const debouncedAutocomplete = useMemo(() => debounce(performAutocomplete, SEARCH_THROTTLE), []); + const throttledAutocomplete = useMemo(() => throttle(performAutocomplete, SEARCH_THROTTLE), []); + + // LRU cache used to keep track of known search results. This avoids + // re-fetching search results when the user hits backspaces several times. + const searchCache = useMemo(() => new LRU({ max: 100, maxAge : 180000 }), []); + const searchExtendedCache = useMemo(() => new LRU({ max: 100, maxAge : 180000 }), []); + + // Create a function to set the results for a given result type + const cachedSetResultsBase = + (cache: LRU, setResultsFn: Dispatch>) => + (query: string, results: T | undefined) => { + debug("setting results for %s", query, results); + + // Cowardly refuse to perform any search if the rate limit was hit + if (!results || rateLimitHit) return setResultsFn(undefined); + + // If this result isn't for the most recent search query (i.e. it + // arrived out of order), ignore it + if (query !== waitingForRef.current) { + debug("ignoring out of order query %s (we need %s)", query, waitingForRef.current); + return; + } + + cache.set(query, results); + setResultsFn(results); + setLoading(false); + }; + + const cachedSetResults = cachedSetResultsBase(searchCache, setResults); + const cachedSetExtendedResults = cachedSetResultsBase(searchExtendedCache, setExtendedResults); + + function onRateLimitHit() { + // Ignore repeated rate limit errors + if (rateLimitHit) return; + + // Lyqydate the search input and wait 5 seconds before unlocking it + debug("rate limit hit, locking input for 5 seconds"); + setRateLimitHit(true); + + setTimeout(() => { + debug("unlocking input"); + setRateLimitHit(false); + }, SEARCH_RATE_LIMIT_WAIT); + } + + function onSearch(query: string) { + debug("onSearch: %s", query); + + // Cowardly refuse to perform any search if the rate limit was hit + if (rateLimitHit) return; + + const cleanQuery = query.trim(); + if (!cleanQuery) { + setResults(undefined); + setLoading(false); + return; + } + + // Use the search cache if possible, to avoid unnecessary network requests + const cached = searchCache.get(cleanQuery); + const cachedExtended = searchExtendedCache.get(cleanQuery); + if (cached || cachedExtended) { + debug("using cached result for %s (results: %b) (extended: %b)", query, !cached, !cachedExtended, cached, cachedExtended); + + // Ensure that an out of order request doesn't overwrite our cached result + waitingForRef.current = query; + + // Cancel any existing throttled request + throttledAutocomplete.cancel(); + debouncedAutocomplete.cancel(); + + if (cached) setResults(cached); + if (cachedExtended) setExtendedResults(cachedExtended); + + setLoading(false); + } + + // If we're missing one or both of the cached result sets, fetch them + if (!cached || !cachedExtended) { + debug("nothing cached for %s, (results: %b) (extended: %b), considering a fetch", query, !cached, !cachedExtended); + + setLoading(true); + + // Based on this article: + // https://www.peterbe.com/plog/how-to-throttle-and-debounce-an-autocomplete-input-in-react + // Eagerly use `throttle` for short inputs, and patiently use `debounce` + // for longer inputs. + const fn = cleanQuery.length < 5 + ? throttledAutocomplete + : debouncedAutocomplete; + + fn( + cleanQuery, + !cached, !cachedExtended, + waitingForRef, + cachedSetResults, cachedSetExtendedResults, + onRateLimitHit + ); + } + } + + /** Navigate to the selected search result. */ + function onSelect(query: string) { + debug("onSelect %s", query); + + // Reset the search value when a result is selected. This is because, + // otherwise, the internal value (e.g. `exactAddress`) would remain in + // there, which would look pretty odd. + // REVIEW: Would be nice to avoid having to do it this way entirely. + setValue(""); + + // If we're still loading the results, don't search just yet. + // TODO: is it possible to defer this instead? + if (loading || !results) return; + + const resultsMatches = results.matches; + const { exactAddress, exactName, exactBlock, exactTransaction } = resultsMatches; + + debug("search selected value %s", query); + + // Whether or not we actually matched a value. This should pretty much + // always be true. + let matched = true; + + // Using the internal result type, navigate to the relevant page. + // FIXME: this is kinda wack + if (query === "exactAddress" && exactAddress) { + history.push(`/network/addresses/${encodeURIComponent(exactAddress.address)}`); + } else if (query === "exactName" && exactName) { + history.push(`/network/names/${encodeURIComponent(exactName.name)}`); + } else if (query === "exactBlock" && exactBlock) { + history.push(`/network/blocks/${encodeURIComponent(exactBlock.height)}`); + } else if (query === "exactTransaction" && exactTransaction) { + history.push(`/network/transactions/${encodeURIComponent(exactTransaction.id)}`); + } else if (extendedResults) { + const { originalQuery } = extendedResults.query; + const q = "?q=" + encodeURIComponent(originalQuery); + debug("extended search query: %s (?q: %s)", originalQuery, q); + + if (query === "extendedTransactionsAddress") { + history.push("/network/search/transactions/address" + q); + } else if (query === "extendedTransactionsName") { + history.push("/network/search/transactions/name" + q); + } else if (query === "extendedTransactionsMetadata") { + history.push("/network/search/transactions/metadata" + q); + } else { + matched = false; + debug("warn: unknown search type %s", query); + } + } else { + matched = false; + debug("warn: unknown search type %s", query); + } + + // De-focus the search textbox when an item is selected. + if (matched && autocompleteRef.current) + autocompleteRef.current.blur(); + } + + // When the 'enter' key is pressed while an autocomplete option isn't focused, + // or the user clicks the 'search' button, the autocomplete has no way of + // knowing which option to search with. So, we look at the first option in the + // list and send that to onSelect. + function onInputSearch() { + // If we're still loading the results, don't search just yet. + // TODO: is it possible to defer this instead? + if (loading || !results) return; + + if (!options || !options.length) return; + onSelect(options[0].value); + } + + const staticOption = (value: string, label: ReactNode) => [{ value, label }]; + const renderOptions = useCallback(function(): { value: string; label: ReactNode }[] { + const cleanQuery = value.trim(); + // debug("current state: %b %b %b %b", rateLimitHit, !cleanQuery, loading, results); + + // Show a warning instead of the results if the rate limit was hit + if (rateLimitHit) return staticOption("rateLimitHit", ); + // Don't return anything if there's no query at all + if (!cleanQuery) return []; + + if (!results) { + // Loading spinner, only if we don't already have some results + if (loading) return staticOption("loading", ); + else return staticOption("noResults", ); + } + + const resultsMatches = results.matches; + + // The list of results to return for the AutoComplete component + const options = []; + + // The 'exact match' results; these are pretty immediate and return + // definitive data + const { exactAddress, exactName, exactBlock, exactTransaction } = resultsMatches; + + if (exactAddress) options.push({ + value: "exactAddress", + label: + }); + if (exactName) options.push({ + value: "exactName", + label: + }); + if (exactBlock) options.push({ + value: "exactBlock", + label: + }); + if (exactTransaction) options.push({ + value: "exactTransaction", + label: + }); + + // The 'extended' results; these are counts of transactions and may take a + // bit longer to load. They're only shown if the query is longer than 3 + // characters. + if (cleanQuery.length > 3) { + // Whether or not to show the loading spinner on the extended items. + // This is a pretty poor way to track if the extended results are still + // loading some new value. + const extendedLoading = loading && (!extendedResults || extendedResults.query.originalQuery !== cleanQuery); + const extendedMatches = extendedResults?.matches?.transactions; + + // Do our own checks to preemptively know what kind of transaction results + // will be shown. Note that metadata will always be searched. + const addressInvolved = extendedMatches?.addressInvolved; + const showAddress = (addressInvolved !== false && addressInvolved !== undefined) + && exactAddress; // We definitely know the address exists + + const nameInvolved = extendedMatches?.nameInvolved; + const showName = (nameInvolved !== false && nameInvolved !== undefined) + && exactName; // We definitely know the name exists + + if (showAddress) options.push({ + value: "extendedTransactionsAddress", + label: + }); + + if (showName) options.push({ + value: "extendedTransactionsName", + label: + }); + + // Metadata is always searched + options.push({ + value: "extendedTransactionsMetadata", + label: + }); + } + + return options; + }, [value, loading, rateLimitHit, results, extendedResults]); + + useEffect(() => { + setOptions(renderOptions()); + }, [renderOptions]); + + return
+ { + e?.preventDefault(); + autocompleteRef.current?.focus(); + } + }} + /> + + true} + + onChange={value => { + // debug("search onChange %s", value); + setLoading(true); + setValue(value); + }} + onSearch={onSearch} + onSelect={onSelect} + + // NOTE: This was removed and the LRU expiry time was lowered; a definite + // decision on whether or not the cache should be cleared every time + // the search is opened hasn't been reached, but at the moment it + // seems to be better to just keep the cached entries around, as + // speed and lack of network spam is better than accuracy of the + // result hints. Besides, pressing enter will always take you to the + // up-to-date data anyway. + /* onFocus={() => { + debug("clearing search cache"); + searchCache.reset(); + }} */ + + options={options} + > + + +
; +} diff --git a/src/layout/nav/SearchResults.less b/src/layout/nav/SearchResults.less new file mode 100644 index 0000000..6640ab8 --- /dev/null +++ b/src/layout/nav/SearchResults.less @@ -0,0 +1,90 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +@import (reference) "../../App.less"; + +.search-result-loading { + display: flex; + justify-content: center; + padding-top: 6px; +} + +.search-result { + &.search-result-exact { + display: flex; + } + + &.search-result-extended { + background: @kw-dark; + transition: background 0.3s ease; + } + + .search-result-type { + display: block; + + color: @text-color-secondary; + font-size: @font-size-sm; + font-weight: bold; + text-transform: uppercase; + } + + .search-result-value { + font-weight: bold; + } + + .result-left { + flex: 1; + } + + .result-right { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-end; + + flex: 0; + + text-align: right; + + .krist-value { + font-size: @font-size-lg; + } + + .search-name-owner, .search-block-miner { + display: block; + color: @text-color-secondary; + } + + .date-time { + color: @text-color-secondary; + font-size: 90%; + } + } + + .search-result-extended-info { + font-size: @font-size-sm; + + .anticon { + color: @primary-color; + margin-right: @padding-xs; + } + } +} + +.site-header-search-menu { + // Remove the padding from the menu, so it can be re-added to the + // .search-result-* items, allowing them to change the background + padding: 0; + + .ant-select-item { + padding: 0; + + .search-result { + padding: @select-dropdown-vertical-padding @control-padding-horizontal; + } + + &:hover .search-result-extended, &-option-active:not(&-disabled) .search-result-extended { + background: @select-item-active-bg; + } + } +} diff --git a/src/layout/nav/SearchResults.tsx b/src/layout/nav/SearchResults.tsx new file mode 100644 index 0000000..602bd9b --- /dev/null +++ b/src/layout/nav/SearchResults.tsx @@ -0,0 +1,198 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { ReactNode } from "react"; +import { Typography, Spin } from "antd"; +import { LoadingOutlined } from "@ant-design/icons"; + +import { Trans, useTranslation } from "react-i18next"; + +import { KristAddress, KristName, KristBlock, KristTransaction } from "@api/types"; +import { KristValue } from "@comp/krist/KristValue"; +import { KristNameLink } from "@comp/names/KristNameLink"; +import { DateTime } from "@comp/DateTime"; + +import "./SearchResults.less"; + +const { Text } = Typography; + +export function Loading(): JSX.Element { + return
; +} + +export function NoResults(): JSX.Element { + const { t } = useTranslation(); + return {t("nav.search.noResults")}; +} + +export function RateLimitHit(): JSX.Element { + const { t } = useTranslation(); + return {t("nav.search.rateLimitHit")}; +} + +interface ExactMatchBaseProps { + typeKey: string; + primaryValue: ReactNode | number; + extraInfo?: ReactNode; +} +export function ExactMatchBase({ typeKey, primaryValue, extraInfo }: ExactMatchBaseProps): JSX.Element { + const { t } = useTranslation(); + + return
+
+ {/* Result type (e.g. 'Address', 'Transaction') */} + + {t(typeKey)} + + + {/* Primary result value (e.g. the address, the ID) */} + + {typeof primaryValue === "number" + ? primaryValue.toLocaleString() + : primaryValue} + +
+ + {extraInfo &&
+ {extraInfo} +
} +
; +} + +export function ExactAddressMatch({ address }: { address: KristAddress }): JSX.Element { + return } + />; +} + +export function ExactNameMatch({ name }: { name: KristName }): JSX.Element { + const { t } = useTranslation(); + + function Owner() { + return {name.owner}; + } + + return } + extraInfo={ + + Owned by + + } + />; +} + +export function ExactBlockMatch({ block }: { block: KristBlock }): JSX.Element { + const { t } = useTranslation(); + + function Miner() { + return {block.address}; + } + + return + + + Mined by + + + + + } + />; +} + +export function ExactTransactionMatch({ transaction }: { transaction: KristTransaction }): JSX.Element { + return + + + } + />; +} + +interface ExtendedMatchProps { + loading?: boolean; + count?: number; + query?: ReactNode; + + loadingKey: string; + resultKey: string; +} +type ExtendedMatchBaseProps = Omit & { query: string }; +export function ExtendedMatchBase({ loading, count, query, loadingKey, resultKey }: ExtendedMatchProps): JSX.Element { + const { t } = useTranslation(); + + function Query(): JSX.Element { + return <>{query}; + } + + return
+ {/* Result type (e.g. 'Address', 'Transaction') */} + + {t("nav.search.resultTransactions")} + + + + {loading || typeof count !== "number" + ? <> + + + Placeholder + + + : (count > 0 + ? ( + + {{ count }} placeholder + + ) + : ( + + No placeholder + + ))} + + +
; +} + +export function ExtendedAddressMatch(props: ExtendedMatchBaseProps): JSX.Element { + return {props.query}} + + loadingKey="nav.search.resultTransactionsAddress" + resultKey="nav.search.resultTransactionsAddressResult" + />; +} + +export function ExtendedNameMatch(props: ExtendedMatchBaseProps): JSX.Element { + return } + + loadingKey="nav.search.resultTransactionsName" + resultKey="nav.search.resultTransactionsNameResult" + />; +} + +export function ExtendedMetadataMatch(props: ExtendedMatchBaseProps): JSX.Element { + return '{props.query}'} + + loadingKey="nav.search.resultTransactionsMetadata" + resultKey="nav.search.resultTransactionsMetadataResult" + />; +} diff --git a/src/layout/sidebar/ServiceWorkerCheck.tsx b/src/layout/sidebar/ServiceWorkerCheck.tsx new file mode 100644 index 0000000..079878f --- /dev/null +++ b/src/layout/sidebar/ServiceWorkerCheck.tsx @@ -0,0 +1,61 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useState, useEffect } from "react"; +import { Button } from "antd"; + +import { useTranslation } from "react-i18next"; + +import * as serviceWorker from "@utils/serviceWorkerRegistration"; + +import Debug from "debug"; +const debug = Debug("kristweb:service-worker-check"); + +export function ServiceWorkerCheck(): JSX.Element | null { + const { t } = useTranslation(); + + const [showReload, setShowReload] = useState(false); + const [waitingWorker, setWaitingWorker] = useState(null); + const [loading, setLoading] = useState(false); + + function onUpdate(registration: ServiceWorkerRegistration) { + setShowReload(true); + setWaitingWorker(registration.waiting); + } + + /** Force the service worker to update, wait for it to become active, then + * reload the page. */ + function reloadPage() { + setLoading(true); + debug("emitting skipWaiting now"); + + waitingWorker?.postMessage({ type: "SKIP_WAITING" }); + + waitingWorker?.addEventListener("statechange", () => { + debug("SW state changed to %s", waitingWorker?.state); + + if (waitingWorker?.state === "activated") { + debug("reloading now!"); + window.location.reload(); + } + }); + } + + // NOTE: The update checker is also responsible for registering the service + // worker in the first place. + useEffect(() => { + debug("registering service worker"); + serviceWorker.register({ onUpdate }); + }, []); + + return showReload ? ( +
+
{t("sidebar.updateTitle")}
+

{t("sidebar.updateDescription")}

+ + +
+ ) : null; +} diff --git a/src/layout/sidebar/Sidebar.less b/src/layout/sidebar/Sidebar.less new file mode 100644 index 0000000..828824e --- /dev/null +++ b/src/layout/sidebar/Sidebar.less @@ -0,0 +1,168 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +@import (reference) "../../App.less"; + +.site-sidebar { + background: @kw-sidebar-bg; + border-right: 1px solid @kw-border-color-darker; + + width: @kw-sidebar-width; + + position: fixed; + top: @layout-header-height; + bottom: 0; + + // Above the mobile collapse backdrop, below the modals + z-index: 910; + + transition: left @kw-sidebar-collapse-duration ease; + left: 0; + + &.collapsed { + left: -@kw-sidebar-width; + } + + .site-sidebar-header { + padding: 0.5rem 1rem; + + background: @kw-sidebar-header-bg; + border-bottom: 1px solid @kw-border-color-darker; + + line-height: 1.25; + + user-select: none; + + h5 { + margin-bottom: 0; + + font-size: @font-size-sm; + font-weight: bolder; + + color: @text-color-secondary; + } + + &.site-sidebar-update { + padding: 1rem; + + background: @primary-color; + color: @kw-darkest; + + h5 { + color: @kw-darkest; + margin-bottom: @padding-xs; + } + } + + &.site-sidebar-total-balance { + .anticon svg { + width: 14px; + height: 14px; + + position: relative; + bottom: 0.15em; + + color: @text-color-secondary; + } + + .krist-value { + font-size: 20px; + } + } + } + + .ant-layout-sider-children { + display: flex; + flex-direction: column; + + & > .ant-menu { + overflow-y: auto; + height: 100%; + } + } + + .ant-menu-item-group .ant-menu-item-group-title { + font-size: 0.8em; + font-weight: bold; + text-transform: uppercase; + + color: @kw-text-secondary; + + // margin: 1rem 0 0 0; + margin: 0; + padding: 1rem 1rem 0.5rem 1rem; + + border-top: 1px solid @kw-border-color-division; + + user-select: none; + } + + .ant-menu-item { + margin-top: 0; + margin-bottom: 0 !important; + padding: 0; + + line-height: @kw-sidebar-item-height; + height: @kw-sidebar-item-height; + vertical-align: middle; + + user-select: none; + + .anticon { + line-height: @kw-sidebar-item-height; + vertical-align: middle; + + font-size: 18px; + } + } + + .site-sidebar-footer { + user-select: none; + + padding: 0.5rem; + + text-align: center; + font-size: 75%; + + color: @text-color-secondary; + + a { + color: @text-color; + } + + .site-sidebar-footer-version { + margin: @padding-xs -0.5rem 0 -0.5rem; + padding-top: @padding-xs; + + border-top: 1px solid @kw-border-color-division; + + font-size: 90%; + font-weight: 500; + line-height: 1; + } + } +} + +.site-sidebar-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + + transition: opacity @kw-sidebar-collapse-duration ease; + + background: @kw-sidebar-backdrop-bg; + opacity: 1; + + pointer-events: all; + cursor: pointer; + + // Below the sidebar and modals + z-index: 900; + + &.collapsed { + pointer-events: none; + opacity: 0; + } +} diff --git a/src/layout/sidebar/Sidebar.tsx b/src/layout/sidebar/Sidebar.tsx new file mode 100644 index 0000000..963ed57 --- /dev/null +++ b/src/layout/sidebar/Sidebar.tsx @@ -0,0 +1,91 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useState, useEffect } from "react"; +import { Layout, Menu, MenuItemProps } from "antd"; +import { HomeOutlined, WalletOutlined, TeamOutlined, BankOutlined, TagsOutlined, SketchOutlined, BuildOutlined, StockOutlined } from "@ant-design/icons"; + +import { TFunction, useTranslation } from "react-i18next"; +import { useLocation } from "react-router-dom"; + +import { ServiceWorkerCheck } from "./ServiceWorkerCheck"; +import { SidebarTotalBalance } from "./SidebarTotalBalance"; +import { SidebarFooter } from "./SidebarFooter"; + +import { ConditionalLink } from "@comp/ConditionalLink"; + +import "./Sidebar.less"; + +const { Sider } = Layout; + +type SidebarItemProps = MenuItemProps & { + to: string; + icon: React.ReactNode; + name: string; + + nyi?: boolean; + + group?: "network"; +} +const sidebarItems: SidebarItemProps[] = [ + { icon: , name: "dashboard", to: "/" }, + { icon: , name: "myWallets", to: "/wallets" }, + { icon: , name: "addressBook", to: "/contacts" }, + { icon: , name: "transactions", to: "/me/transactions" }, + { icon: , name: "names", to: "/me/names" }, + { icon: , name: "mining", to: "/mining", nyi: true }, + + { group: "network", icon: , name: "blocks", to: "/network/blocks" }, + { group: "network", icon: , name: "transactions", to: "/network/transactions" }, + { group: "network", icon: , name: "names", to: "/network/names" }, + { group: "network", icon: , name: "statistics", to: "/network/statistics", nyi: true }, +]; + +function getSidebarItems(t: TFunction, group?: string) { + return sidebarItems + .filter(i => i.group === group) + .map(i => ( + + + {t("sidebar." + i.name)} + + + )); +} + +export function Sidebar({ collapsed }: { collapsed: boolean }): JSX.Element { + const { t } = useTranslation(); + + const location = useLocation(); + const [selectedKey, setSelectedKey] = useState(); + + useEffect(() => { + setSelectedKey(sidebarItems.find(i => i.to === "/" + ? location.pathname === "/" + : location.pathname.startsWith(i.to))?.to); + }, [location]); + + return + {/* Service worker update checker, which may appear at the top of the + * sidebar if an update is available. */} + + + {/* Total balance */} + + + {/* Menu items */} + + {getSidebarItems(t)} + + + {getSidebarItems(t, "network")} + + + + {/* Credits footer */} + + ; +} diff --git a/src/layout/sidebar/SidebarFooter.tsx b/src/layout/sidebar/SidebarFooter.tsx new file mode 100644 index 0000000..c189bb9 --- /dev/null +++ b/src/layout/sidebar/SidebarFooter.tsx @@ -0,0 +1,49 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useTranslation, Trans } from "react-i18next"; + +import { getAuthorInfo, useHostInfo } from "@utils/credits"; + +import { ConditionalLink } from "@comp/ConditionalLink"; + +declare const __GIT_VERSION__: string; + +export function SidebarFooter(): JSX.Element { + const { t } = useTranslation(); + + const { authorName, authorURL, gitURL } = getAuthorInfo(); + const host = useHostInfo(); + + // Replaced by webpack DefinePlugin and git-revision-webpack-plugin + const gitVersion: string = __GIT_VERSION__; + + return ( +
+
+ Made by {{authorName}} +
+ { host && + + } +
+ {t("sidebar.github")} +  –  + + {t("sidebar.whatsNew")} + +  –  + + {t("sidebar.credits")} + +
+ + {/* Git describe version */} +
+ {gitVersion} +
+
+ ); +} diff --git a/src/layout/sidebar/SidebarTotalBalance.tsx b/src/layout/sidebar/SidebarTotalBalance.tsx new file mode 100644 index 0000000..7e15f07 --- /dev/null +++ b/src/layout/sidebar/SidebarTotalBalance.tsx @@ -0,0 +1,23 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useTranslation } from "react-i18next"; + +import { useWallets } from "@wallets"; +import { KristValue } from "@comp/krist/KristValue"; + +export function SidebarTotalBalance(): JSX.Element { + const { t } = useTranslation(); + + const { wallets } = useWallets(); + const balance = Object.values(wallets) + .filter(w => w.balance !== undefined) + .reduce((acc, w) => acc + w.balance!, 0); + + return ( +
+
{t("sidebar.totalBalance")}
+ +
+ ); +} diff --git a/src/logo.svg b/src/logo.svg deleted file mode 100644 index 6b60c10..0000000 --- a/src/logo.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/pages/CheckStatus.tsx b/src/pages/CheckStatus.tsx new file mode 100644 index 0000000..630cca9 --- /dev/null +++ b/src/pages/CheckStatus.tsx @@ -0,0 +1,11 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt + +import { AppLayout } from "@layout/AppLayout"; +import { StatusPage } from "./StatusPage"; + +export function CheckStatus(): JSX.Element { + const ok = /^.?O[kC]/.test(localStorage.getItem("status") || "offline"); + return ok ? : ; +} diff --git a/src/pages/NotFoundPage.tsx b/src/pages/NotFoundPage.tsx new file mode 100644 index 0000000..f68adad --- /dev/null +++ b/src/pages/NotFoundPage.tsx @@ -0,0 +1,27 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { Button } from "antd"; +import { FrownOutlined } from "@ant-design/icons"; + +import { useHistory } from "react-router-dom"; +import { useTranslation } from "react-i18next"; + +import { SmallResult } from "@comp/results/SmallResult"; + +export function NotFoundPage(): JSX.Element { + const { t } = useTranslation(); + const history = useHistory(); + + return } + status="error" + title={t("pageNotFound.resultTitle")} + extra={( + + )} + fullPage + />; +} diff --git a/src/pages/StatusPage.tsx b/src/pages/StatusPage.tsx new file mode 100644 index 0000000..0a37b85 --- /dev/null +++ b/src/pages/StatusPage.tsx @@ -0,0 +1,12 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { Alert } from "antd"; + +import { useTranslation } from "react-i18next"; + +export function StatusPage(): JSX.Element { + const { t } = useTranslation(); + + return ; +} diff --git a/src/pages/addresses/AddressButtonRow.tsx b/src/pages/addresses/AddressButtonRow.tsx new file mode 100644 index 0000000..638914e --- /dev/null +++ b/src/pages/addresses/AddressButtonRow.tsx @@ -0,0 +1,73 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { Button, Tooltip } from "antd"; +import { SendOutlined, SwapOutlined, UserAddOutlined, EditOutlined } from "@ant-design/icons"; + +import { useTranslation } from "react-i18next"; + +import { isV1Address } from "@utils/currency"; + +import { KristAddressWithNames } from "@api/lookup"; +import { Wallet } from "@wallets"; +import { Contact } from "@contacts"; +import { WalletEditButton } from "../wallets/WalletEditButton"; +import { ContactEditButton } from "../contacts/ContactEditButton"; +import { SendTransactionModalLink } from "@comp/transactions/SendTransactionModalLink"; + +interface Props { + address: KristAddressWithNames; + myWallet?: Wallet; + myContact?: Contact; +} + +export function AddressButtonRow({ + address, + myWallet, + myContact +}: Props): JSX.Element { + const { t } = useTranslation(); + + const isV1 = address && isV1Address(address.address); + + const sendButton = ; + + return <> + {/* Send/transfer Krist button */} + {isV1 + ? ( // Disable the button and show a tooltip for V1 addresses + + {sendButton} + + ) + : ( // Otherwise, enable the button + + {sendButton} + + )} + + {/* Add contact/edit wallet button */} + {myWallet + ? ( + + + + ) + : ( + + + + )} + ; +} diff --git a/src/pages/addresses/AddressNamesCard.tsx b/src/pages/addresses/AddressNamesCard.tsx new file mode 100644 index 0000000..7c915a2 --- /dev/null +++ b/src/pages/addresses/AddressNamesCard.tsx @@ -0,0 +1,76 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useState, useEffect } from "react"; +import classNames from "classnames"; +import { Card, Skeleton, Empty, Row } from "antd"; + +import { useTranslation } from "react-i18next"; +import { Link } from "react-router-dom"; + +import { NameItem } from "./NameItem"; +import { lookupNames, LookupNamesResponse } from "@api/lookup"; + +import { useSyncNode } from "@api"; + +import { SmallResult } from "@comp/results/SmallResult"; + +import Debug from "debug"; +const debug = Debug("kristweb:address-names-card"); + +async function fetchNames(address: string): Promise { + debug("fetching names"); + return lookupNames( + [address], + { limit: 5, orderBy: "registered", order: "DESC" } + ); +} + +export function AddressNamesCard({ address }: { address: string }): JSX.Element { + const { t } = useTranslation(); + const syncNode = useSyncNode(); + + const [res, setRes] = useState(); + const [error, setError] = useState(); + const [loading, setLoading] = useState(true); + + // Fetch names on page load or sync node reload + useEffect(() => { + if (!syncNode) return; + + // Remove the existing results in case the address changed + setRes(undefined); + setLoading(true); + + fetchNames(address) + .then(setRes) + .catch(setError) + .finally(() => setLoading(false)); + }, [syncNode, address]); + + const isEmpty = !loading && (error || !res || res.count === 0); + const classes = classNames("kw-card", "address-card-names", { + "empty": isEmpty + }); + + return + + {error + ? + : (res && res.count > 0 + ? <> + {/* Name listing */} + {res.names.map(name => )} + + {/* See more link */} + + + {t("address.namesSeeMore", { count: res.total })} + + + + : + )} + + ; +} diff --git a/src/pages/addresses/AddressPage.less b/src/pages/addresses/AddressPage.less new file mode 100644 index 0000000..75d12e8 --- /dev/null +++ b/src/pages/addresses/AddressPage.less @@ -0,0 +1,74 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +@import (reference) "../../App.less"; + +.address-page { + .top-address-row { + display: flex; + align-items: center; + + .address { + display: inline-block; + margin-right: @margin-lg; + margin-bottom: 0; + + font-size: @font-size-base * 2; + font-weight: 500; + + .ant-typography-copy { + line-height: 1 !important; + margin-left: @padding-xs; + + .anticon { + font-size: @font-size-base; + vertical-align: 0; + } + } + } + + .ant-btn { + margin-right: @margin-md; + } + + > .ant-btn:last-child { margin-right: 0; } + } + + .address-wallet-row { + margin-top: @padding-xs; + font-size: 90%; + + .prefix { + margin-right: @padding-xs; + } + + .address-wallet-verified, + .address-wallet-label, + .address-wallet-category, + .address-wallet-contact { + &:not(:last-child) { + margin-right: @padding-xs; + } + } + } + + .address-verified-description-row { + margin-top: @margin-md; + margin-bottom: @margin-md; + } + + .address-info-row { + max-width: 768px; + margin-bottom: @margin-lg; + + .kw-statistic { + margin-top: @margin-lg; + } + } + + .address-card-names { + .address-name-item { + display: block; + } + } +} diff --git a/src/pages/addresses/AddressPage.tsx b/src/pages/addresses/AddressPage.tsx new file mode 100644 index 0000000..b08e932 --- /dev/null +++ b/src/pages/addresses/AddressPage.tsx @@ -0,0 +1,219 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useState, useEffect } from "react"; +import { Row, Col, Skeleton, Tag, Typography } from "antd"; + +import { useTranslation } from "react-i18next"; +import { useParams } from "react-router-dom"; + +import { PageLayout } from "@layout/PageLayout"; +import { APIErrorResult } from "@comp/results/APIErrorResult"; + +import { Statistic } from "@comp/Statistic"; +import { KristValue } from "@comp/krist/KristValue"; +import { DateTime } from "@comp/DateTime"; + +import * as api from "@api"; +import { lookupAddress, KristAddressWithNames } from "@api/lookup"; +import { useWallets } from "@wallets"; +import { useContacts } from "@contacts"; +import { useSubscription } from "@global/ws/WebsocketSubscription"; +import { useBooleanSetting } from "@utils/settings"; + +import { AddressButtonRow } from "./AddressButtonRow"; +import { AddressTransactionsCard } from "./AddressTransactionsCard"; +import { AddressNamesCard } from "./AddressNamesCard"; + +import { getVerified, VerifiedDescription } from "@comp/addresses/VerifiedAddress"; + +import "./AddressPage.less"; + +const { Text } = Typography; + +interface ParamTypes { + address: string; +} + +interface PageContentsProps { + address: KristAddressWithNames; + lastTransactionID: number; +} + +function PageContents({ address, lastTransactionID }: PageContentsProps): JSX.Element { + const { t } = useTranslation(); + const { walletAddressMap } = useWallets(); + const { contactAddressMap } = useContacts(); + + const myWallet = walletAddressMap[address.address]; + const myContact = contactAddressMap[address.address]; + const showWalletTags = myWallet && (myWallet.label || myWallet.category); + const showContactTags = myContact && myContact.label; + + const verified = getVerified(address.address); + const showVerifiedDesc = verified?.description || verified?.website || + verified?.isActive === false; + + return <> + {/* Address and buttons */} + + {/* Address */} + + {address.address} + + + {/* Buttons (e.g. Send Krist, Add contact) */} + + + + {/* Wallet/contact/verified tags (if applicable) */} + {(showWalletTags || showContactTags || verified) && ( + + {/* Verified label */} + {verified?.label && + + {verified.label} + + } + + {/* Label */} + {myWallet?.label && + {t("address.walletLabel")} + {myWallet.label} + } + + {/* Category */} + {myWallet?.category && + {t("address.walletCategory")} + {myWallet.category} + } + + {/* Contact label */} + {myContact?.label && + {t("address.contactLabel")} + {myContact.label} + } + + )} + + {/* Main address info */} + + {/* Current balance */} + + } + /> + + + {/* Names */} + + 0 + ? t("address.nameCount", { count: address.names }) + : t("address.nameCountEmpty")} + /> + + + {/* First seen */} + + } + /> + + + + {/* Verified description/website */} + {showVerifiedDesc && ( + + )} + + {/* Transaction and name row */} + + {/* Recent transactions */} + + + + + {/* Names */} + + {/* TODO: Subscription for this card */} + + + + ; +} + +export function AddressPage(): JSX.Element { + // Used to refresh the address data on syncNode change + const syncNode = api.useSyncNode(); + + const { address } = useParams(); + const [kristAddress, setKristAddress] = useState(); + const [error, setError] = useState(); + + // Used to refresh the address data when a transaction is made to it + const lastTransactionID = useSubscription({ address }); + const shouldAutoRefresh = useBooleanSetting("autoRefreshAddressPage"); + const usedRefreshID = shouldAutoRefresh ? lastTransactionID : 0; + + // Load the address on page load + // TODO: passthrough router state to pre-load from search + // REVIEW: The search no longer clears the LRU cache on each open, meaning it + // is possible for an address's information to be up to 3 minutes + // out-of-date in the search box. If we passed through the state from + // the search and directly used it here, it would definitely be too + // outdated to display. It could be possible to show that state data + // and still lookup the most recent data, but is it worth it? The page + // would appear 10-200ms faster, sure, but if the data _has_ changed, + // then it would cause a jarring re-render, just to save a single + // cheap network request. Will definitely require some further + // usability testing. + useEffect(() => { + lookupAddress(address, true) + .then(setKristAddress) + .catch(setError); + }, [syncNode, address, usedRefreshID]); + + // Change the page title depending on whether or not the address has loaded + const title = kristAddress + ? { siteTitle: kristAddress.address, subTitle: kristAddress.address } + : { siteTitleKey: "address.title" }; + + return + {error + ? ( + + ) + : (kristAddress + ? ( + + ) + : )} + ; +} diff --git a/src/pages/addresses/AddressTransactionsCard.tsx b/src/pages/addresses/AddressTransactionsCard.tsx new file mode 100644 index 0000000..e8121cc --- /dev/null +++ b/src/pages/addresses/AddressTransactionsCard.tsx @@ -0,0 +1,76 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useState, useEffect } from "react"; +import classNames from "classnames"; +import { Card, Skeleton, Empty } from "antd"; + +import { useTranslation } from "react-i18next"; + +import { TransactionSummary } from "@comp/transactions/TransactionSummary"; +import { lookupTransactions, LookupTransactionsResponse } from "@api/lookup"; + +import { useSyncNode } from "@api"; + +import { SmallResult } from "@comp/results/SmallResult"; + +import Debug from "debug"; +const debug = Debug("kristweb:address-transactions-card"); + +async function fetchTransactions(address: string): Promise { + debug("fetching transactions"); + return lookupTransactions( + [address], + { includeMined: true, limit: 5, orderBy: "id", order: "DESC" } + ); +} + +interface Props { + address: string; + lastTransactionID: number; +} + +export function AddressTransactionsCard({ address, lastTransactionID }: Props): JSX.Element { + const { t } = useTranslation(); + const syncNode = useSyncNode(); + + const [res, setRes] = useState(); + const [error, setError] = useState(); + const [loading, setLoading] = useState(true); + + // Fetch transactions on page load or sync node reload + useEffect(() => { + if (!syncNode) return; + + // Remove the existing results in case the address changed + setRes(undefined); + setLoading(true); + + fetchTransactions(address) + .then(setRes) + .catch(setError) + .finally(() => setLoading(false)); + }, [syncNode, address, lastTransactionID]); + + const isEmpty = !loading && (error || !res || res.count === 0); + const classes = classNames("kw-card", "address-card-transactions", { + "empty": isEmpty + }); + + return + + {error + ? + : (res && res.count > 0 + ? ( + + ) + : + )} + + ; +} diff --git a/src/pages/addresses/NameItem.tsx b/src/pages/addresses/NameItem.tsx new file mode 100644 index 0000000..4cf3359 --- /dev/null +++ b/src/pages/addresses/NameItem.tsx @@ -0,0 +1,34 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { Row } from "antd"; + +import { useTranslation, Trans } from "react-i18next"; +import { Link } from "react-router-dom"; + +import { KristName } from "@api/types"; +import { KristNameLink } from "@comp/names/KristNameLink"; +import { DateTime } from "@comp/DateTime"; + +export function NameItem({ name }: { name: KristName }): JSX.Element { + const { t } = useTranslation(); + + const nameEl = ; + const nameLink = "/network/names/" + encodeURIComponent(name.name); + const nameTime = new Date(name.registered); + + return +
+ {/* Display 'purchased' if this is the original owner, otherwise display + * 'received'. */} + {name.owner === name.original_owner + ? Purchased {nameEl} + : Received {nameEl}} +
+ + {/* Purchase time */} + + + +
; +} diff --git a/src/pages/backup/BackupResultsSummary.less b/src/pages/backup/BackupResultsSummary.less new file mode 100644 index 0000000..83825c1 --- /dev/null +++ b/src/pages/backup/BackupResultsSummary.less @@ -0,0 +1,21 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +@import (reference) "../../App.less"; + +.backup-results-summary { + .summary-wallets-imported .positive, .summary-contacts-imported .positive { + color: @kw-green; + font-weight: bold; + } + + .summary-errors-warnings .errors { + color: @kw-red; + font-weight: bold; + } + + .summary-errors-warnings .warnings { + color: @kw-orange; + font-weight: bold; + } +} diff --git a/src/pages/backup/BackupResultsSummary.tsx b/src/pages/backup/BackupResultsSummary.tsx new file mode 100644 index 0000000..ad937c4 --- /dev/null +++ b/src/pages/backup/BackupResultsSummary.tsx @@ -0,0 +1,90 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { Typography } from "antd"; + +import { useTranslation, Trans } from "react-i18next"; + +import { BackupResults, ResultType } from "./backupResults"; + +import "./BackupResultsSummary.less"; + +const { Paragraph } = Typography; + +function getMessageCountByType( + results: BackupResults, + type: ResultType +): number { + let acc = 0; + + acc += Object.values(results.messages.wallets) + .reduce((acc, r) => acc + r.messages.filter(m => m.type === type).length, 0); + acc += Object.values(results.messages.contacts) + .reduce((acc, r) => acc + r.messages.filter(m => m.type === type).length, 0); + + return acc; +} + +/** Provides a paragraph summarising the results of the backup import (e.g. the + * amount of wallets imported, the amount of errors, etc.). */ +export function BackupResultsSummary({ results }: { results: BackupResults }): JSX.Element { + const { t } = useTranslation(); + + const { newWallets, skippedWallets, newContacts, skippedContacts } = results; + const warningCount = getMessageCountByType(results, "warning"); + const errorCount = getMessageCountByType(results, "error"); + + return + {/* New wallets imported count */} +
+ {newWallets > 0 + ? ( + + {{ count: newWallets }} new wallet + was imported. + + ) + : t("import.results.noneImported")} +
+ + {/* Skipped wallets count */} + {skippedWallets > 0 &&
+ + {{ count: skippedWallets }} wallet was skipped. + +
} + + {/* New contacts imported count */} + {newContacts > 0 &&
+ + {{ count: newContacts }} new contact + was imported. + +
} + + {/* Skipped contacts count */} + {skippedContacts > 0 &&
+ + {{ count: skippedContacts }} contact was skipped. + +
} + + {/* Errors */} + {errorCount > 0 &&
+ + There was + {{ count: errorCount }} error + while importing your backup. + +
} + + {/* Warnings */} + {warningCount > 0 &&
+ + There was + {{ count: warningCount }} warning + while importing your backup. + +
} +
; +} diff --git a/src/pages/backup/BackupResultsTree.less b/src/pages/backup/BackupResultsTree.less new file mode 100644 index 0000000..9f25aaa --- /dev/null +++ b/src/pages/backup/BackupResultsTree.less @@ -0,0 +1,28 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +@import (reference) "../../App.less"; + +.backup-results-tree { + max-height: 480px; + overflow-y: auto; + + .backup-result-icon { + margin-right: @padding-xs; + } + + // Map the different result type icons to their appropriate colours + .anticon.backup-result-success { color: @kw-green; } + .anticon.backup-result-warning { color: @kw-orange; } + .anticon.backup-result-error { color: @kw-red; } + + // Make the non-leaf nodes bold, so the tree is more readable + .ant-tree-treenode:not(.backup-results-tree-message) .ant-tree-title { + font-weight: 500; + } + + // The leaf nodes have an invisible button which takes up space; remove that + .ant-tree-switcher-noop { + display: none; + } +} diff --git a/src/pages/backup/BackupResultsTree.tsx b/src/pages/backup/BackupResultsTree.tsx new file mode 100644 index 0000000..a0c8a94 --- /dev/null +++ b/src/pages/backup/BackupResultsTree.tsx @@ -0,0 +1,141 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useMemo } from "react"; +import { Tree } from "antd"; +import { DataNode } from "antd/lib/tree"; +import { CheckCircleOutlined, WarningOutlined, ExclamationCircleOutlined } from "@ant-design/icons"; + +import { i18n } from "i18next"; +import { useTranslation, TFunction } from "react-i18next"; +import { translateError } from "@utils/i18n"; + +import { + BackupResults, ResultType, MessageType, TranslatedMessage +} from "./backupResults"; + +import "./BackupResultsTree.less"; + +interface Props { + results: BackupResults; +} + +const CLEAN_ID_RE = /^(?:[Ww]allet\d*|[Ff]riend\d*|[Cc]ontact\d*)-/; + +/** Maps the different types of message results (success, warning, error) + * to icons. */ +function getMessageIcon(type: ResultType) { + switch (type) { + case "success": + return ; + case "warning": + return ; + case "error": + return ; + } +} + +/** Maps the different types of messages to a properly rendered ReactNode. */ +function getMessageTitle( + t: TFunction, i18n: i18n, + message?: MessageType, error?: Error +): React.ReactNode { + // If there was an error, translate it if possible and render it. + if (error) { + return translateError(t, error); + } + + // If there's no error, show the message instead + if (typeof message === "string") { + // If the message is a string, translate it if possible, otherwise, render + // it directly. + if (i18n.exists(message)) return t(message); + else return message; + } else if (message && typeof message === "object" && (message as TranslatedMessage).key) { + // If the message is a TranslatedMessage, translate it and substitute the + // arguments in + const msg = (message as TranslatedMessage); + return t(msg.key, msg.args); + } else if (message) { + // It's probably a ReactNode, render it directly + return message; + } + + // Shouldn't happen, but there was neither a message nor an error. + return null; +} + +function getTreeItem( + t: TFunction, i18n: i18n, + results: BackupResults, + type: "wallets" | "contacts", + id: string, +): DataNode { + // The IDs are the keys of the backup, which may begin with prefixes like + // "Wallet-"; remove those for cleanliness + const cleanID = id.replace(CLEAN_ID_RE, ""); + const resultSet = results.messages[type][id]; + const { label, messages } = resultSet; + const messageNodes: DataNode[] = []; + + for (let i = 0; i < messages.length; i++) { + const { type, message, error } = messages[i]; + const icon = getMessageIcon(type); + const title = getMessageTitle(t, i18n, message, error); + + messageNodes.push({ + key: `${type}-${cleanID}-${i}`, + title, + icon, + isLeaf: true, + className: "backup-results-tree-message" + }); + } + + return { + key: `${type}-${cleanID}`, + title: t( + type === "wallets" + ? "import.results.treeWallet" + : "import.results.treeContact", + { id: label || cleanID } + ), + children: messageNodes + }; +} + +/** Converts the backup results into a tree of messages, grouped by wallet + * and contact UUID. */ +function getTreeData( + t: TFunction, i18n: i18n, + results: BackupResults +): DataNode[] { + const out: DataNode[] = []; + + // Add the wallet messages data + for (const id in results.messages.wallets) + out.push(getTreeItem(t, i18n, results, "wallets", id)); + + // Add the contact messages data + for (const id in results.messages.contacts) + out.push(getTreeItem(t, i18n, results, "contacts", id)); + + return out; +} + +export function BackupResultsTree({ results }: Props): JSX.Element { + const { t, i18n } = useTranslation(); + + const treeData = useMemo(() => + getTreeData(t, i18n, results), [t, i18n, results]); + + return ; +} diff --git a/src/pages/backup/ExportBackupModal.tsx b/src/pages/backup/ExportBackupModal.tsx new file mode 100644 index 0000000..460d9e5 --- /dev/null +++ b/src/pages/backup/ExportBackupModal.tsx @@ -0,0 +1,115 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useState, useEffect, useRef, Dispatch, SetStateAction } from "react"; +import { Modal, Button, Input } from "antd"; +import { DownloadOutlined } from "@ant-design/icons"; + +import { Trans } from "react-i18next"; +import { useTFns } from "@utils/i18n"; + +import { useWallets } from "@wallets"; + +import { backupExport } from "./backupExport"; +import { CopyInputButton } from "@comp/CopyInputButton"; + +import dayjs from "dayjs"; +import { saveAs } from "file-saver"; + +interface Props { + visible?: boolean; + setVisible: Dispatch>; +} + +export function ExportBackupModal({ + visible, + setVisible +}: Props): JSX.Element { + const { t, tStr, tKey } = useTFns("export."); + + // The generated export code + const [code, setCode] = useState(""); + const inputRef = useRef(null); + + // Used to auto-refresh the code if the wallets change + const { wallets } = useWallets(); + + // Generate the backup code + useEffect(() => { + // Don't bother generating if the modal isn't visible + if (!visible) { + setCode(""); + return; + } + + backupExport() + .then(setCode) + .catch(console.error); + }, [visible, wallets]); + + function saveToFile() { + const blob = new Blob([code], { type: "text/plain;charset=utf-8" }); + saveAs(blob, `KristWeb2-export-${dayjs().format("YYYY-MM-DD--HH-mm-ss")}.txt`); + closeModal(); + } + + function closeModal() { + setVisible(false); + setCode(""); + } + + // Shows a formatted size for the backup code + function Size() { + return {(code.length / 1024).toFixed(1)} KiB; + } + + return + {/* Close button */} + + + {/* Copy to clipboard button */} + + + {/* Save to file button */} + + } + + onCancel={closeModal} + destroyOnClose + > + {/* Description paragraph */} +

+ This secret code contains your wallets and address book contacts. You can + use it to import them in another browser, or to back them up. You will + still need your master password to import the wallets in the future. + Do not share this code with anyone. +

+ + {/* Size calculation */} +

+ Size: +

+ + +
; +} diff --git a/src/pages/backup/ImportBackupForm.tsx b/src/pages/backup/ImportBackupForm.tsx new file mode 100644 index 0000000..adfac8e --- /dev/null +++ b/src/pages/backup/ImportBackupForm.tsx @@ -0,0 +1,201 @@ +// Copyright (c) 2020-2021 Drew Lemmy +// This file is part of KristWeb 2 under AGPL-3.0. +// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt +import { useState, Dispatch, SetStateAction } from "react"; +import { Form, Input, Checkbox, Typography } from "antd"; + +import { useTFns, translateError } from "@utils/i18n"; + +import { getMasterPasswordInput } from "@comp/auth/MasterPasswordInput"; + +import { useBooleanSetting, setBooleanSetting } from "@utils/settings"; + +import { ImportDetectFormat } from "./ImportDetectFormat"; +import { IncrProgressFn, InitProgressFn } from "./ImportProgress"; +import { decodeBackup } from "./backupParser"; +import { backupVerifyPassword, backupImport } from "./backupImport"; +import { BackupResults } from "./backupResults"; + +import Debug from "debug"; +const debug = Debug("kristweb:import-backup-modal"); + +const { Paragraph } = Typography; +const { TextArea } = Input; + +interface FormValues { + masterPassword: string; + code: string; + overwrite: boolean; +} + +interface ImportBackupFormHookRes { + form: JSX.Element; + + resetForm: () => void; + triggerSubmit: () => Promise; + + setCode: (code: string) => void; +} + +export function useImportBackupForm( + setLoading: Dispatch>, + setResults: Dispatch>, + + onProgress: IncrProgressFn, + initProgress: InitProgressFn +): ImportBackupFormHookRes { + const { t, tStr, tKey } = useTFns("import."); + + const [form] = Form.useForm(); + + const [code, setCode] = useState(""); + const [decodeError, setDecodeError] = useState(); + const [masterPasswordError, setMasterPasswordError] = useState(); + + const importOverwrite = useBooleanSetting("importOverwrite"); + + function resetForm() { + form.resetFields(); + setCode(""); + setDecodeError(""); + setMasterPasswordError(""); + } + + function onValuesChange(changed: Partial) { + if (changed.code) setCode(changed.code); + + // Remember the value of the 'overwrite' checkbox + if (changed.overwrite !== undefined) { + debug("updating importOverwrite to %b", changed.overwrite); + setBooleanSetting("importOverwrite", changed.overwrite, false); + } + } + + // Detect the backup format for the final time, validate the password, and + // if all is well, begin the import + async function onFinish() { + const values = await form.validateFields(); + + const { masterPassword, code, overwrite } = values; + if (!masterPassword || !code) return; + + setLoading(true); + + try { + // Decode first + const backup = decodeBackup(code); + debug("detected format: %s", backup.type); + setDecodeError(undefined); + + // Attempt to verify the master password + await backupVerifyPassword(backup, masterPassword); + setMasterPasswordError(undefined); + + // Perform the import + const results = await backupImport( + backup, masterPassword, !overwrite, + onProgress, initProgress + ); + + setResults(results); + } catch (err) { + if (err.message === "import.masterPasswordRequired" + || err.message === "import.masterPasswordIncorrect") { + // Master password incorrect error + setMasterPasswordError(translateError(t, err)); + } else { + // Any other decoding error + console.error(err); + setDecodeError(translateError(t, err, tKey("decodeErrors.unknown"))); + } + } finally { + setLoading(false); + } + } + + const formEl =
+ {/* Import lead */} + {tStr("description")} + + {/* Detected format information */} + + + {/* Password input */} + + {getMasterPasswordInput({ + placeholder: tStr("masterPasswordPlaceholder"), + autoFocus: true + })} + + + {/* Code textarea */} + +