pax_global_header00006660000000000000000000000064141420216500014505gustar00rootroot0000000000000052 comment=211fa0ebec9b628affc09219199639887174bfc3 saxes-6.0.0/000077500000000000000000000000001414202165000126335ustar00rootroot00000000000000saxes-6.0.0/.editorconfig000066400000000000000000000002301414202165000153030ustar00rootroot00000000000000[**/*] root=true end_of_line = lf indent_style = space indent_size = 2 insert_final_newline = true max_line_length = 80 trim_trailing_whitespace = true saxes-6.0.0/.eslintrc.js000066400000000000000000000044671414202165000151050ustar00rootroot00000000000000"use strict"; module.exports = { overrides: [{ files: [ "**/*.js", ], extends: [ "lddubeau-base", ], env: { node: true, }, overrides: [{ files: [ "lib/**/*.js", ], rules: { "no-continue": "off", // We use constant conditions quite often, for optimization reasons. "no-constant-condition": "off", }, }, { files: [ "test/**/*.js", ], env: { mocha: true, }, rules: { "no-unused-expressions": ["off", "Lots of false positivites due to chai."], }, }, { files: [ "misc/**/*.js", ], env: { browser: true, node: false, }, }], }, { files: [ "**/*.ts", ], env: { node: true, }, extends: [ "eslint:recommended", "eslint-config-lddubeau-ts", ], rules: { "no-console": process.env.NODE_ENV === "production" ? "error" : "off", "no-debugger": process.env.NODE_ENV === "production" ? "error" : "off", // There's a bug in this plugin. "import/extensions": ["off", "always", { pattern: { js: "never", ts: "never", }, }], // There's a bug in this plugin. "import/no-unresolved": "off", // Too useful in this code-base. "@typescript-eslint/no-non-null-assertion": "off", }, overrides: [{ files: [ "test/**/*.ts", ], env: { mocha: true, }, parserOptions: { project: "test/tsconfig.json", sourceType: "module", }, settings: { "import/parsers": { "@typescript-eslint/parser": [".ts", ".tsx"], }, "import/resolver": { // use /tsconfig.json typescript: { project: "./test", }, }, }, rules: { "no-unused-expressions": ["off", "Lots of false positivites due to chai."], "no-shadow": ["off", "We shadow test all over the place."], "@typescript-eslint/tslint/config": [ "error", { lintFile: "./.tslint.config.json", }, ], // Routinely violated by large describe blocks. "max-lines-per-function": "off", }, }], }], }; saxes-6.0.0/.github/000077500000000000000000000000001414202165000141735ustar00rootroot00000000000000saxes-6.0.0/.github/renovate.json000066400000000000000000000000531414202165000167070ustar00rootroot00000000000000{ "extends": [ "lddubeau:base" ] } saxes-6.0.0/.github/workflows/000077500000000000000000000000001414202165000162305ustar00rootroot00000000000000saxes-6.0.0/.github/workflows/node.js.yml000066400000000000000000000007531414202165000203200ustar00rootroot00000000000000name: Node.js CI on: push: branches: [ master, "renovate/*" ] pull_request: branches: [ master ] jobs: build: runs-on: ubuntu-latest strategy: fail-fast: false matrix: node-version: [12.x, 14.x, 16.x] steps: - uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v2 with: node-version: ${{ matrix.node-version }} cache: 'npm' - run: npm ci - run: npm test saxes-6.0.0/.gitignore000066400000000000000000000001061414202165000146200ustar00rootroot00000000000000.*.swp node_modules/* nyc_output/ .nyc_output/ coverage/ /build /misc saxes-6.0.0/.mocharc.js000066400000000000000000000001341414202165000146610ustar00rootroot00000000000000"use strict"; module.exports = { require: ["test/tshook"], extension: ["ts", "js"], }; saxes-6.0.0/.npmrc000066400000000000000000000000261414202165000137510ustar00rootroot00000000000000legacy-peer-deps=true saxes-6.0.0/.travis.yml000066400000000000000000000001701414202165000147420ustar00rootroot00000000000000language: node_js sudo: false node_js: - node - 12 - 10 cache: directories: - $HOME/.npm - node_modules saxes-6.0.0/.tslint.config.json000066400000000000000000000002311414202165000163610ustar00rootroot00000000000000{ "extends": "eslint-config-lddubeau-ts/tslint.config.json", "rules": { "mocha-no-side-effect-code": false, "chai-vague-errors": false } } saxes-6.0.0/AUTHORS000066400000000000000000000006301414202165000137020ustar00rootroot00000000000000# contributors sorted by whether or not they're me. Louis-Dominique Dubeau Isaac Z. Schlueter Stein Martin Hustad Mikeal Rogers Laurie Harper Jann Horn Elijah Insua Henry Rawas Justin Makeig Mike Schilling saxes-6.0.0/CHANGELOG.md000066400000000000000000000577211414202165000144600ustar00rootroot00000000000000# [6.0.0](https://github.com/lddubeau/saxes/compare/v6.0.0-rc.1...v6.0.0) (2021-11-07) # [6.0.0-rc.1](https://github.com/lddubeau/saxes/compare/v5.0.1...v6.0.0-rc.1) (2021-11-07) ### Bug Fixes * fixing linting errors for eslint 8 ([cd4b5c9](https://github.com/lddubeau/saxes/commit/cd4b5c9ddf166d426ece77349bbde7538fb0aaa4)) * we don't support node 10 anymore ([f2aa1a8](https://github.com/lddubeau/saxes/commit/f2aa1a8e2b379f102010b9c552490f385f7854af)) ### BREAKING CHANGES * we don't support node 10. ## [5.0.1](https://github.com/lddubeau/saxes/compare/v5.0.0...v5.0.1) (2020-04-10) ### Bug Fixes * fix corrupted attribute values when there is no text handler ([e135f11](https://github.com/lddubeau/saxes/commit/e135f11)), closes [#38](https://github.com/lddubeau/saxes/issues/38) # [5.0.0](https://github.com/lddubeau/saxes/compare/v5.0.0-rc.2...v5.0.0) (2020-02-28) # [5.0.0-rc.2](https://github.com/lddubeau/saxes/compare/v5.0.0-rc.1...v5.0.0-rc.2) (2020-02-12) # [5.0.0-rc.1](https://github.com/lddubeau/saxes/compare/v4.0.2...v5.0.0-rc.1) (2020-02-12) ### Bug Fixes * disallow BOM characters at the beginning of subsequent chunks ([66d07b6](https://github.com/lddubeau/saxes/commit/66d07b6)) * fix some typing mistakes ([f2a1d5e](https://github.com/lddubeau/saxes/commit/f2a1d5e)) * handle column computation over characters in the astral plane ([cefc8f7](https://github.com/lddubeau/saxes/commit/cefc8f7)) ### Features * add makeError method ([50fa39a](https://github.com/lddubeau/saxes/commit/50fa39a)) * add xmldecl event ([a2e677f](https://github.com/lddubeau/saxes/commit/a2e677f)) * formal method for setting event listeners ([f346150](https://github.com/lddubeau/saxes/commit/f346150)) * reinstating the attribute events ([7c80f7b](https://github.com/lddubeau/saxes/commit/7c80f7b)) * saxes is now implemented in TS ([664ba69](https://github.com/lddubeau/saxes/commit/664ba69)) ### Performance Improvements * add topNS for faster namespace processing ([1a33a57](https://github.com/lddubeau/saxes/commit/1a33a57)) ### BREAKING CHANGES * The individually named event handlers no longer exist. You now must use the methods `on` and `off` to set handlers. Upcoming features require that saxes know when handlers are added and removed, and it may be necessary in the future to qualify how to add or remove a handler. Getters/setters are too restrictives so we bite the bullet now and move to actual methods. * The fix to column number reporting changes the meaning of the ``column`` field. If you need the old behavior of ``column`` you can use the new ``columnIndex`` field which behaves like the old ``column`` and may be useful in some contexts. Ultimately you should decide whether your application needs to know column numbers by Unicode character count or by JavaScript index. (And you need to know the difference between the two. You can see [this page](https://mathiasbynens.be/notes/javascript-unicode) for a detailed discussion of the Unicode problem in JavaScript. Note that the numbers put in the error messages that ``fail`` produce are still based on the ``column`` field and thus use the new meaning of ``column``. If you want error message that use ``columnIndex`` you may override the ``fail`` method. ## [4.0.2](https://github.com/lddubeau/saxes/compare/v4.0.0-rc.4...v4.0.2) (2019-10-14) ## [4.0.1](https://github.com/lddubeau/saxes/compare/v4.0.0...v4.0.1) (2019-10-14) # [4.0.0](https://github.com/lddubeau/saxes/compare/v4.0.0-rc.4...v4.0.0) (2019-10-14) # [4.0.0-rc.4](https://github.com/lddubeau/saxes/compare/v4.0.0-rc.2...v4.0.0-rc.4) (2019-10-11) ### Bug Fixes * fix a bug in EOL handling ([bed38a8](https://github.com/lddubeau/saxes/commit/bed38a8)) * implement attribute normalization ([be51114](https://github.com/lddubeau/saxes/commit/be51114)), closes [#24](https://github.com/lddubeau/saxes/issues/24) ### Performance Improvements * inline closeText ([07a3b51](https://github.com/lddubeau/saxes/commit/07a3b51)) # [4.0.0-rc.3](https://github.com/lddubeau/saxes/compare/v4.0.0-rc.2...v4.0.0-rc.3) (2019-10-11) ### Bug Fixes * fix a bug in EOL handling ([03b1567](https://github.com/lddubeau/saxes/commit/03b1567)) * implement attribute normalization ([6580844](https://github.com/lddubeau/saxes/commit/6580844)), closes [#24](https://github.com/lddubeau/saxes/issues/24) ### Performance Improvements * inline closeText ([1c8df1a](https://github.com/lddubeau/saxes/commit/1c8df1a)) # [4.0.0-rc.2](https://github.com/lddubeau/saxes/compare/v4.0.0-rc.1...v4.0.0-rc.2) (2019-10-04) ### Performance Improvements * drop the originalNL flag in favor of a NL_LIKE fake character ([f690725](https://github.com/lddubeau/saxes/commit/f690725)) * dump isNaN; it is very costly ([7d97e1a](https://github.com/lddubeau/saxes/commit/7d97e1a)) * eliminate extra buffers ([3412fcb](https://github.com/lddubeau/saxes/commit/3412fcb)) * reduce the number of calls to closeText ([3e68df5](https://github.com/lddubeau/saxes/commit/3e68df5)) * remove more extra buffers ([b5ee774](https://github.com/lddubeau/saxes/commit/b5ee774)) * use -1 to mean EOC (end-of-chunk) ([55c0b1b](https://github.com/lddubeau/saxes/commit/55c0b1b)) # [4.0.0-rc.1](https://github.com/lddubeau/saxes/compare/v3.1.11...v4.0.0-rc.1) (2019-10-02) ### Bug Fixes * don't serialize the fileName as undefined: when not present ([4ff2365](https://github.com/lddubeau/saxes/commit/4ff2365)) * fix bug with initial eol characters ([7b3db75](https://github.com/lddubeau/saxes/commit/7b3db75)) * handling of end of line characters ([f13247a](https://github.com/lddubeau/saxes/commit/f13247a)) ### Features * add forceXMLVersion ([1eedbf8](https://github.com/lddubeau/saxes/commit/1eedbf8)) * saxes handles chunks that "break" unicode ([1272448](https://github.com/lddubeau/saxes/commit/1272448)) * support for XML 1.1 ([36704fb](https://github.com/lddubeau/saxes/commit/36704fb)) ### Performance Improvements * don't depend on limit to know when we hit the end of buffer ([ad4ab53](https://github.com/lddubeau/saxes/commit/ad4ab53)) * don't increment a column number ([490fc24](https://github.com/lddubeau/saxes/commit/490fc24)) * don't repeatedly read this.i in the getCode methods ([d3f196c](https://github.com/lddubeau/saxes/commit/d3f196c)) * improve performance of text handling ([9c13099](https://github.com/lddubeau/saxes/commit/9c13099)) * make the most common path of getCode functions the shortest ([4d66bbb](https://github.com/lddubeau/saxes/commit/4d66bbb)) * minimine concatenation by adding the capability to unget codes ([27fa8b9](https://github.com/lddubeau/saxes/commit/27fa8b9)) * use isCharAndNotRestricted rather than call two functions ([f0b67a4](https://github.com/lddubeau/saxes/commit/f0b67a4)) * use slice rather than substring ([c1fed89](https://github.com/lddubeau/saxes/commit/c1fed89)) ### BREAKING CHANGES * previous versions of saxes did not consistently convert end of line characters to NL (0xA) in the data reported by event handlers. This has been fixed. If your code relied on the old (incorrect) behavior then you'll have to update it. * previous versions of saxes would parse files with an XML declaration set to 1.1 as 1.0 documents. The support for 1.1 entails that if a document has an XML declaration that specifies version 1.1 it is parsed as a 1.1 document. * when ``fileName`` is undefined in the parser options saxes does not show a file name in error messages. Previously it was showing the name ``undefined``. To get the previous behavior, in all cases where you'd leave ``fileName`` undefined, you must set it to the string ``"undefined"`` instead. ## [3.1.11](https://github.com/lddubeau/saxes/compare/v3.1.10...v3.1.11) (2019-06-25) ### Bug Fixes * pay attention to comments and processing instructions in DTDs ([52ffd90](https://github.com/lddubeau/saxes/commit/52ffd90)), closes [#19](https://github.com/lddubeau/saxes/issues/19) ### Performance Improvements * check the most common case first ([40a34d5](https://github.com/lddubeau/saxes/commit/40a34d5)) * improve some more the speed of ]]> detection ([a0216cd](https://github.com/lddubeau/saxes/commit/a0216cd)) * move more common/valid cases first ([a65586e](https://github.com/lddubeau/saxes/commit/a65586e)) * split sText into two specialized loops ([732325e](https://github.com/lddubeau/saxes/commit/732325e)) * use specialized code for sAttribValueQuoted ([6c484f3](https://github.com/lddubeau/saxes/commit/6c484f3)) ## [3.1.10](https://github.com/lddubeau/saxes/compare/v3.1.9...v3.1.10) (2019-06-11) ### Performance Improvements * improve the check for ]]> in character data ([21df9b5](https://github.com/lddubeau/saxes/commit/21df9b5)) ## [3.1.9](https://github.com/lddubeau/saxes/compare/v3.1.7...v3.1.9) (2019-02-25) ### Bug Fixes * move eslint to devDependencies ([d747538](https://github.com/lddubeau/saxes/commit/d747538)) ## [3.1.8](https://github.com/lddubeau/saxes/compare/v3.1.7...v3.1.8) (2019-02-25) ## [3.1.7](https://github.com/lddubeau/saxes/compare/v3.1.6...v3.1.7) (2019-02-22) ### Bug Fixes * npm audit warning ([a6c9ba8](https://github.com/lddubeau/saxes/commit/a6c9ba8)) * **typings:** "selfClosing" => "isSelfClosing" ([d96a2bd](https://github.com/lddubeau/saxes/commit/d96a2bd)) ## [3.1.6](https://github.com/lddubeau/saxes/compare/v3.1.5...v3.1.6) (2019-01-17) ### Bug Fixes * detect unclosed tags in fragments ([5642f36](https://github.com/lddubeau/saxes/commit/5642f36)) ## [3.1.5](https://github.com/lddubeau/saxes/compare/v3.1.4...v3.1.5) (2019-01-08) ### Bug Fixes * generate an error on prefix with empty local name ([89a3b86](https://github.com/lddubeau/saxes/commit/89a3b86)), closes [#5](https://github.com/lddubeau/saxes/issues/5) ## [3.1.4](https://github.com/lddubeau/saxes/compare/v3.1.3...v3.1.4) (2018-12-03) ### Bug Fixes * add fragment and additionalNamespaces to SaxesOption typing ([02d8275](https://github.com/lddubeau/saxes/commit/02d8275)) ## [3.1.3](https://github.com/lddubeau/saxes/compare/v3.1.2...v3.1.3) (2018-10-01) ### Bug Fixes * use the latest xmlchars ([b30a714](https://github.com/lddubeau/saxes/commit/b30a714)) ### Performance Improvements * don't check twice if this.textNode is set ([00536cc](https://github.com/lddubeau/saxes/commit/00536cc)) * reduce the frequency at which we clear attribValue ([1570615](https://github.com/lddubeau/saxes/commit/1570615)) ## [3.1.2](https://github.com/lddubeau/saxes/compare/v3.1.1...v3.1.2) (2018-08-31) ### Bug Fixes * CDATA end in attributes must not cause an error ([a7495ac](https://github.com/lddubeau/saxes/commit/a7495ac)) * normalize \r\n and \r followed by something else to \n ([d7b1abe](https://github.com/lddubeau/saxes/commit/d7b1abe)), closes [#2](https://github.com/lddubeau/saxes/issues/2) ## [3.1.1](https://github.com/lddubeau/saxes/compare/v3.1.0...v3.1.1) (2018-08-29) ### Bug Fixes * resolve is now part of the public API ([bb4bed5](https://github.com/lddubeau/saxes/commit/bb4bed5)) # [3.1.0](https://github.com/lddubeau/saxes/compare/v3.0.0...v3.1.0) (2018-08-28) ### Bug Fixes * correct typo ([97bc5da](https://github.com/lddubeau/saxes/commit/97bc5da)) ### Performance Improvements * add emitNodes to skip checking text buffer more than needed ([9d5e357](https://github.com/lddubeau/saxes/commit/9d5e357)) * capture names in the ``name`` field ([c7dffd5](https://github.com/lddubeau/saxes/commit/c7dffd5)) * introduce a specialized version of captureWhile ([04855d6](https://github.com/lddubeau/saxes/commit/04855d6)) * introduce captureTo and captureToChar ([76eb95a](https://github.com/lddubeau/saxes/commit/76eb95a)) * remove skipWhitespace ([c8b7ae2](https://github.com/lddubeau/saxes/commit/c8b7ae2)) * remove some redundant buffer resets ([5ded326](https://github.com/lddubeau/saxes/commit/5ded326)) * use charCodeAt and handle surrogates ourselves ([b8ec232](https://github.com/lddubeau/saxes/commit/b8ec232)) # [3.0.0](https://github.com/lddubeau/saxes/compare/v2.2.1...v3.0.0) (2018-08-21) ### Features * process the xmlns attribute the customary way ([2c9672a](https://github.com/lddubeau/saxes/commit/2c9672a)) ### BREAKING CHANGES * In previous versions the attribute `xmlns` (as in `` would be reported as having the prefix `"xmlns"` and the local name `""`. This behavior was inherited from sax. There was some logic to it, but this behavior was surprising to users of the library. The principle of least surprise favors eliminating that surprising behavior in favor of something less surprising. This commit makes it so that `xmlns` is not reported as having a prefix of `""` and a local name of `"xmlns"`. This accords with how people interpret attribute names like `foo`, `bar`, `moo` which all have no prefix and a local name. Code that deals with namespace bindings or cares about `xmlns` probably needs to be changed. ## [2.2.1](https://github.com/lddubeau/saxes/compare/v2.2.0...v2.2.1) (2018-08-20) ### Bug Fixes * use `isNameChar` for later chars in PI target ([83d2b61](https://github.com/lddubeau/saxes/commit/83d2b61)) # [2.2.0](https://github.com/lddubeau/saxes/compare/v2.1.0...v2.2.0) (2018-08-20) ### Features * add the `resolvePrefix` option ([90301fb](https://github.com/lddubeau/saxes/commit/90301fb)) # [2.1.0](https://github.com/lddubeau/saxes/compare/v2.0.0...v2.1.0) (2018-08-20) ### Features * add support for parsing fragments ([1ff2d6a](https://github.com/lddubeau/saxes/commit/1ff2d6a)) * stronger check on bad cdata closure ([d416760](https://github.com/lddubeau/saxes/commit/d416760)) ### Performance Improvements * concatenate openWakaBang just once ([07345bf](https://github.com/lddubeau/saxes/commit/07345bf)) * improve text node checking speed ([f270e8b](https://github.com/lddubeau/saxes/commit/f270e8b)) * minor optimizations ([c7e36bf](https://github.com/lddubeau/saxes/commit/c7e36bf)) * remove an unnecessary variable ([ac03a1c](https://github.com/lddubeau/saxes/commit/ac03a1c)) * remove handler check ([fbe35ff](https://github.com/lddubeau/saxes/commit/fbe35ff)) * simplify captureWhile ([bb2085c](https://github.com/lddubeau/saxes/commit/bb2085c)) * simplify the skip functions ([c7b8c3b](https://github.com/lddubeau/saxes/commit/c7b8c3b)) * the c field has been unused for a while: remove it ([9ca0246](https://github.com/lddubeau/saxes/commit/9ca0246)) * use strings for the general states ([3869908](https://github.com/lddubeau/saxes/commit/3869908)) # [2.0.0](https://github.com/lddubeau/saxes/compare/v1.2.4...v2.0.0) (2018-07-23) ### Bug Fixes * "X" is not a valid hex prefix for char references ([465038b](https://github.com/lddubeau/saxes/commit/465038b)) * add namespace checks ([9f94c4b](https://github.com/lddubeau/saxes/commit/9f94c4b)) * always run in strict mode ([ed8b0b1](https://github.com/lddubeau/saxes/commit/ed8b0b1)) * check that the characters we read are valid char data ([7611a85](https://github.com/lddubeau/saxes/commit/7611a85)) * disallow spaces after open waka ([da7f76d](https://github.com/lddubeau/saxes/commit/da7f76d)) * drop the lowercase option ([987d4bf](https://github.com/lddubeau/saxes/commit/987d4bf)) * emit CDATA on empty CDATA section too ([95d192f](https://github.com/lddubeau/saxes/commit/95d192f)) * emit empty comment ([b3db392](https://github.com/lddubeau/saxes/commit/b3db392)) * entities are always strict ([0f6a30e](https://github.com/lddubeau/saxes/commit/0f6a30e)) * fail on colon at start of QName ([507addd](https://github.com/lddubeau/saxes/commit/507addd)) * harmonize error messages and initialize flags ([9a20cad](https://github.com/lddubeau/saxes/commit/9a20cad)) * just one error for text before the root, and text after ([101ea50](https://github.com/lddubeau/saxes/commit/101ea50)) * more namespace checks ([a1add21](https://github.com/lddubeau/saxes/commit/a1add21)) * move namespace checks to their proper place ([4a1c99f](https://github.com/lddubeau/saxes/commit/4a1c99f)) * only accept uppercase CDATA to mark the start of CDATA ([e86534d](https://github.com/lddubeau/saxes/commit/e86534d)) * prevent colons in pi and entity names when xmlns is true ([4327eec](https://github.com/lddubeau/saxes/commit/4327eec)) * prevent empty entities ([04e1593](https://github.com/lddubeau/saxes/commit/04e1593)) * raise an error if the document does not have a root ([f2de520](https://github.com/lddubeau/saxes/commit/f2de520)) * raise an error on ]]> in character data ([2964381](https://github.com/lddubeau/saxes/commit/2964381)) * raise an error on < in attribute values ([4fd67a1](https://github.com/lddubeau/saxes/commit/4fd67a1)) * raise an error on multiple root elements ([45047ae](https://github.com/lddubeau/saxes/commit/45047ae)) * raise error on CDATA before or after root ([604241f](https://github.com/lddubeau/saxes/commit/604241f)) * raise error on character reference outside CHAR production ([30fb540](https://github.com/lddubeau/saxes/commit/30fb540)) * remove broken or pointless examples ([1a5b642](https://github.com/lddubeau/saxes/commit/1a5b642)) * report an error on duplicate attributes ([ee4e340](https://github.com/lddubeau/saxes/commit/ee4e340)) * report an error on whitespace at the start of end tag ([c13b122](https://github.com/lddubeau/saxes/commit/c13b122)) * report processing instructions that do not have a target ([c007e39](https://github.com/lddubeau/saxes/commit/c007e39)) * treat ?? in processing instructions correctly ([bc1e1d4](https://github.com/lddubeau/saxes/commit/bc1e1d4)) * trim URIs ([78cc6f3](https://github.com/lddubeau/saxes/commit/78cc6f3)) * use xmlchars for checking names ([2c939fe](https://github.com/lddubeau/saxes/commit/2c939fe)) * verify that character references match the CHAR production ([369afde](https://github.com/lddubeau/saxes/commit/369afde)) ### Code Refactoring * adjust the names used for processing instructions ([3b508e9](https://github.com/lddubeau/saxes/commit/3b508e9)) * convert code to ES6 ([fe81170](https://github.com/lddubeau/saxes/commit/fe81170)) * drop attribute event ([c7c2e80](https://github.com/lddubeau/saxes/commit/c7c2e80)) * drop buffer size checks ([9ce2f7a](https://github.com/lddubeau/saxes/commit/9ce2f7a)) * drop normalize ([9c6d84c](https://github.com/lddubeau/saxes/commit/9c6d84c)) * drop opencdata and on closecdata ([3287d2c](https://github.com/lddubeau/saxes/commit/3287d2c)) * drop SGML declaration parsing ([4aaf2d9](https://github.com/lddubeau/saxes/commit/4aaf2d9)) * drop the ``parser`` function, rename SAXParser ([0878a6c](https://github.com/lddubeau/saxes/commit/0878a6c)) * drop trim ([c03c7d0](https://github.com/lddubeau/saxes/commit/c03c7d0)) * pass the actual tag to onclosetag ([7020e64](https://github.com/lddubeau/saxes/commit/7020e64)) * provide default no-op implementation for events ([a94687f](https://github.com/lddubeau/saxes/commit/a94687f)) * remove the API based on Stream ([ebb659a](https://github.com/lddubeau/saxes/commit/ebb659a)) * simplify namespace processing ([2d4ce0f](https://github.com/lddubeau/saxes/commit/2d4ce0f)) ### Features * drop the resume() method; and have onerror() throw ([ac601e5](https://github.com/lddubeau/saxes/commit/ac601e5)) * handle XML declarations ([5258939](https://github.com/lddubeau/saxes/commit/5258939)) * revamped error messages ([cf9c589](https://github.com/lddubeau/saxes/commit/cf9c589)) * the flush method returns its parser ([68c2020](https://github.com/lddubeau/saxes/commit/68c2020)) ### BREAKING CHANGES * Sax was only passing the tag name. We pass the whole object. * The API no longer takes a ``strict`` argument anywhere. This also effectively removes support for HTML processing, or allow processing without errors anything which is less than full XML. It also removes special processing of ``script`` elements. * ``attribute`` is not a particularly useful event for parsing XML. The only thing it adds over looking at attributes on tag objects is that you get the order of the attributes from the source, but attribute order in XML is irrelevant. * The opencdata and closecdata events became redundant once we removed the buffer size limitations. So we remove these events. * The ``parser`` function is removed. Just create a new instance with ``new``. ``SAXParser`` is now ``SaxesParser.`` So ``new require("saxes").SaxesParser(...)``. * The API based on Stream is gone. There were multiple issues with it. It was Node-specific. It used an ancient Node API (the so-called "classic streams"). Its behavior was idiosyncratic. * Sax had no default error handler but if you wanted to continue calling ``write()`` after an error you had to call ``resume()``. We do away with ``resume()`` and instead install a default ``onerror`` which throws. Replace with a no-op handler if you want to continue after errors. * The "processinginstruction" now produces a "target" field instead of a "name" field. The nomenclature "target" is the one used in the XML literature. * * The ``ns`` field is no longer using the prototype trick that sax used. The ``ns`` field of a tag contains only those namespaces that the tag declares. * We no longer have ``opennamespace`` and ``closenamespace`` events. The information they provide can be obtained by examining the tags passed to tag events. * SGML declaration is not supported by XML. This is an XML parser. So we remove support for SGML declarations. They now cause errors. * We removed support for the code that checked buffer sizes and would raise errors if a buffer was close to an arbitrary limit or emitted multiple ``text`` or ``cdata`` events in order avoid passing strings greater than an arbitrary size. So ``MAX_BUFFER_LENGTH`` is gone. The feature always seemed a bit awkward. Client code could limit the size of buffers to 1024K, for instance, and not get a ``text`` event with a text payload greater than 1024K... so far so good but if the same document contained a comment with more than 1024K that would result in an error. Hmm.... why? The distinction seems entirely arbitrary. The upshot is that client code needs to be ready to handle strings of any length supported by the platform. If there's a clear need to reintroduce it, we'll reassess. * It is no longer possible to load the library as-is through a ``script`` element. It needs building. The library now assumes a modern runtime. It no longer contains any code to polyfill what's missing. It is up to developers using this code to deal with polyfills as needed. * We drop the ``trim`` option. It is up to client code to trip text if it needs it. * We no longer support the ``normalize`` option. It is up to client code to perform whatever normalization it wants. * The ``lowercase`` option makes no sense for XML. It is removed. * Remove support for strictEntities. Entities are now always strict, as required by the XML specification. * By default parsers now have a default no-op implementation for each event it supports. This would break code that determines whether a custom handler was added by checking whether there's any handler at all. This removes the necessity for the parser implementation to check whether there is a handler before calling it. In the process of making this change, we've removed support for the ``on...`` properties on streams objects. Their existence was not warranted by any standard API provided by Node. (``EventEmitter`` does not have ``on...`` properties for events it supports, nor does ``Stream``.) Their existence was also undocumented. And their functioning was awkward. For instance, with sax, this: ``` const s = sax.createStream(); const handler = () => console.log("moo"); s.on("cdata", handler); console.log(s.oncdata === handler); ``` would print ``false``. If you examine ``s.oncdata`` you see it is glue code instead of the handler assigned. This is just bizarre, so we removed it. saxes-6.0.0/CONTRIBUTING.md000066400000000000000000000106651414202165000150740ustar00rootroot00000000000000## Write A Test Isaac had established this rule for sax, it still goes for saxes: **NO PATCHES WITHOUT A TEST** **TEST MUST PASS WITH THE PATCH.** **TEST MUST FAIL WITHOUT THE PATCH.** **NO EXCEPTIONS.** # EVERY PULL REQUEST MUST HAVE A TEST. Seriously. This is a very strict rule, and I will not bend it for any patch, no matter how minor. Write a test. ## Optimize for the Well-formed Case Optimize your PR for well-formed documents. For instance, if a value is only going to be useful for an error message, and requires additional processing to compute, then don't compute it if the error does not occur. This principle is why saxes continues producing data even when a well-formedness error occurs. The XML specification forbids XML processors from continuing to pass data when a such error occurs. They may only report other errors. However, implementing the XML specification requirement would require that saxes continually check whether it may emit non-error events and this would have a measurable cost even when parsing well-formed documents. We decided always emit the events anyway and diverge a bit from the XML specifications. ## Optimize for "Clean" XML This is well-formed XML: ```xml something ``` This is also well-formed and represents the same document as the previous example: ```xml something ``` We want both documents to be parsed without error by saxes but, when writing code, optimize for the former rather than the later. ## Pay Attention to Performance The more a PR harms performance, 1. The more justified the PR must be. The best justification for a drop in performance is providing a fix that fixes a bug which causes saxes to not be conformant. 2. The more likely we'll ask that the PR be optimized before merging. 3. The more likelihood it'll be ultimately rejected. Please verify the performance impact before submitting the PR. An easy way to do it is: ```terminal $ node examples/null-parser.js examples/data/docbook.rng ``` You should run it before you make your change and after. Make sure you run it when your CPU is relatively idle, and run it multiple times to get a valid result. If the code takes 10 times longer with your change, you know you have a problem. Address it before submitting your PR. In general, we want both elegance and performance. However, in those cases where one must be sacrificed for the other, **we are willing to sacrifice elegance in favor of performance.** A good example of this is how saxes handles the normalization of end-of-line (EOL) characters to newlines (NL). In September 2019 I (lddubeau) discovered that saxes was not doing the normalization correctly. I came up with two fixes: 1. One fix modified the ``write`` method to split chunks on all EOL characters except NL, and would normalize those characters to NL early on. It would also adjust positioning data to handle skipping ``\r`` in the ``\r\n`` sequence, etc. It performed excellently with files containing only ``\n`` but it performed terribly with files that needed normalization. **However**, a file with ``\n`` as EOL would process half as fast if its EOL characters were replaced with ``\r\n`` prior to parsing. The performance for files using anything else than ``\n`` for EOL was atrocious. This approach was the more elegant of the two approaches mentioned here because it made all the logic normalizing EOL characters localized to one spot in the code. It was also the least error-prone approach, for the same reason. Adding a new ``captureSomething`` method would not run the risk of forgetting to handle EOL characters properly. 2. Another fix took the approach of recording state while running ``getCode`` and using this state in all places where substrings are extracted from chunks to handle the presence of EOL characters. This fix performs about as fast as the other fix described above for files that contain ``\n`` as EOL, and maybe 10-20% slower when a file contains ``\r\n``. This approach is definitely not as elegant as the first. It spreads the logic for handling EOL into multiple locations, and there's a risk of forgetting to add the proper logic when adding a new ``captureSomething`` method. Of the two approaches, the 2nd one was the one selected for posterity. Though the first method was more elegant, its performance was unacceptable. saxes-6.0.0/LICENSE000066400000000000000000000057031414202165000136450ustar00rootroot00000000000000The ISC License Copyright (c) Contributors Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ==== The following license is the one that governed sax, from which saxes was forked. Isaac Schlueter is not *directly* involved with saxes so don't go bugging him for saxes issues. The ISC License Copyright (c) Isaac Z. Schlueter and Contributors Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ==== `String.fromCodePoint` by Mathias Bynens is no longer used, but it can still be found in old commits. It was once used according to terms of MIT License, as follows: Copyright Mathias Bynens Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. saxes-6.0.0/README.md000066400000000000000000000354161414202165000141230ustar00rootroot00000000000000# saxes A sax-style non-validating parser for XML. Saxes is a fork of [sax](https://github.com/isaacs/sax-js) 1.2.4. All mentions of sax in this project's documentation are references to sax 1.2.4. Designed with [node](http://nodejs.org/) in mind, but should work fine in the browser or other CommonJS implementations. Saxes does not support Node versions older than 10. ## Notable Differences from Sax. * Saxes aims to be much stricter than sax with regards to XML well-formedness. Sax, even in its so-called "strict mode", is not strict. It silently accepts structures that are not well-formed XML. Projects that need better compliance with well-formedness constraints cannot use sax as-is. Consequently, saxes does not support HTML, or pseudo-XML, or bad XML. Saxes will report well-formedness errors in all these cases but it won't try to extract data from malformed documents like sax does. * Saxes is much much faster than sax, mostly because of a substantial redesign of the internal parsing logic. The speed improvement is not merely due to removing features that were supported by sax. That helped a bit, but saxes adds some expensive checks in its aim for conformance with the XML specification. Redesigning the parsing logic is what accounts for most of the performance improvement. * Saxes does not aim to support antiquated platforms. We will not pollute the source or the default build with support for antiquated platforms. If you want support for IE 11, you are welcome to produce a PR that adds a *new build* transpiled to ES5. * Saxes handles errors differently from sax: it provides a default onerror handler which throws. You can replace it with your own handler if you want. If your handler does nothing, there is no `resume` method to call. * There's no `Stream` API. A revamped API may be introduced later. (It is still a "streaming parser" in the general sense that you write a character stream to it.) * Saxes does not have facilities for limiting the size the data chunks passed to event handlers. See the FAQ entry for more details. ## Conformance Saxes supports: * [XML 1.0 fifth edition](https://www.w3.org/TR/2008/REC-xml-20081126/) * [XML 1.1 second edition](https://www.w3.org/TR/2006/REC-xml11-20060816/) * [Namespaces in XML 1.0 (Third Edition)](https://www.w3.org/TR/2009/REC-xml-names-20091208/). * [Namespaces in XML 1.1 (Second Edition)](https://www.w3.org/TR/2006/REC-xml-names11-20060816/). ## Limitations This is a non-validating parser so it only verifies whether the document is well-formed. We do aim to raise errors for all malformed constructs encountered. However, this parser does not thorougly parse the contents of DTDs. So most malformedness errors caused by errors **in DTDs** cannot be reported. ## Regarding `Hello, world!').close(); ``` ### Constructor Arguments Settings supported: * `xmlns` - Boolean. If `true`, then namespaces are supported. Default is `false`. * `position` - Boolean. If `false`, then don't track line/col/position. Unset is treated as `true`. Default is unset. Currently, setting this to `false` only results in a cosmetic change: the errors reported do not contain position information. sax-js would literally turn off the position-computing logic if this flag was set to false. The notion was that it would optimize execution. In saxes at least it turns out that continually testing this flag causes a cost that offsets the benefits of turning off this logic. * `fileName` - String. Set a file name for error reporting. This is useful only when tracking positions. You may leave it unset. * `fragment` - Boolean. If `true`, parse the XML as an XML fragment. Default is `false`. * `additionalNamespaces` - A plain object whose key, value pairs define namespaces known before parsing the XML file. It is not legal to pass bindings for the namespaces `"xml"` or `"xmlns"`. * `defaultXMLVersion` - The default version of the XML specification to use if the document contains no XML declaration. If the document does contain an XML declaration, then this setting is ignored. Must be `"1.0"` or `"1.1"`. The default is `"1.0"`. * `forceXMLVersion` - Boolean. A flag indicating whether to force the XML version used for parsing to the value of ``defaultXMLVersion``. When this flag is ``true``, ``defaultXMLVersion`` must be specified. If unspecified, the default value of this flag is ``false``. Example: suppose you are parsing a document that has an XML declaration specifying XML version 1.1. If you set ``defaultXMLVersion`` to ``"1.0"`` without setting ``forceXMLVersion`` then the XML declaration will override the value of ``defaultXMLVersion`` and the document will be parsed according to XML 1.1. If you set ``defaultXMLVersion`` to ``"1.0"`` and set ``forceXMLVersion`` to ``true``, then the XML declaration will be ignored and the document will be parsed according to XML 1.0. ### Methods `write` - Write bytes onto the stream. You don't have to pass the whole document in one `write` call. You can read your source chunk by chunk and call `write` with each chunk. `close` - Close the stream. Once closed, no more data may be written until it is done processing the buffer, which is signaled by the `end` event. ### Properties The parser has the following properties: `line`, `column`, `columnIndex`, `position` - Indications of the position in the XML document where the parser currently is looking. The `columnIndex` property counts columns as if indexing into a JavaScript string, whereas the `column` property counts Unicode characters. `closed` - Boolean indicating whether or not the parser can be written to. If it's `true`, then wait for the `ready` event to write again. `opt` - Any options passed into the constructor. `xmlDecl` - The XML declaration for this document. It contains the fields `version`, `encoding` and `standalone`. They are all `undefined` before encountering the XML declaration. If they are undefined after the XML declaration, the corresponding value was not set by the declaration. There is no event associated with the XML declaration. In a well-formed document, the XML declaration may be preceded only by an optional BOM. So by the time any event generated by the parser happens, the declaration has been processed if present at all. Otherwise, you have a malformed document, and as stated above, you cannot rely on the parser data! ### Error Handling The parser continues to parse even upon encountering errors, and does its best to continue reporting errors. You should heed all errors reported. After an error, however, saxes may interpret your document incorrectly. For instance ```` is invalid XML. Did you mean to have ```` or ```` or some other variation? For the sake of continuing to provide errors, saxes will continue parsing the document, but the structure it reports may be incorrect. It is only after the errors are fixed in the document that saxes can provide a reliable interpretation of the document. That leaves you with two rules of thumb when using saxes: * Pay attention to the errors that saxes report. The default `onerror` handler throws, so by default, you cannot miss errors. * **ONCE AN ERROR HAS BEEN ENCOUNTERED, STOP RELYING ON THE EVENT HANDLERS OTHER THAN `onerror`.** As explained above, when saxes runs into a well-formedness problem, it makes a guess in order to continue reporting more errors. The guess may be wrong. ### Events To listen to an event, override `on`. The list of supported events are also in the exported `EVENTS` array. See the JSDOC comments in the source code for a description of each supported event. ### Parsing XML Fragments The XML specification does not define any method by which to parse XML fragments. However, there are usage scenarios in which it is desirable to parse fragments. In order to allow this, saxes provides three initialization options. If you pass the option `fragment: true` to the parser constructor, the parser will expect an XML fragment. It essentially starts with a parsing state equivalent to the one it would be in if `parser.write(")` had been called right after initialization. In other words, it expects content which is acceptable inside an element. This also turns off well-formedness checks that are inappropriate when parsing a fragment. The option `additionalNamespaces` allows you to define additional prefix-to-URI bindings known before parsing starts. You would use this over `resolvePrefix` if you have at the ready a series of namespaces bindings to use. The option `resolvePrefix` allows you to pass a function which saxes will use if it is unable to resolve a namespace prefix by itself. You would use this over `additionalNamespaces` in a context where getting a complete list of defined namespaces is onerous. Note that you can use `additionalNamespaces` and `resolvePrefix` together if you want. `additionalNamespaces` applies before `resolvePrefix`. The options `additionalNamespaces` and `resolvePrefix` are really meant to be used for parsing fragments. However, saxes won't prevent you from using them with `fragment: false`. Note that if you do this, your document may parse without errors and yet be malformed because the document can refer to namespaces which are not defined *in* the document. Of course, `additionalNamespaces` and `resolvePrefix` are used only if `xmlns` is `true`. If you are parsing a fragment that does not use namespaces, there's no point in setting these options. ### Performance Tips * saxes works faster on files that use newlines (``\u000A``) as end of line markers than files that use other end of line markers (like ``\r`` or ``\r\n``). The XML specification requires that conformant applications behave as if all characters that are to be treated as end of line characters are converted to ``\u000A`` prior to parsing. The optimal code path for saxes is a file in which all end of line characters are already ``\u000A``. * Don't split Unicode strings you feed to saxes across surrogates. When you naively split a string in JavaScript, you run the risk of splitting a Unicode character into two surrogates. e.g. In the following example ``a`` and ``b`` each contain half of a single Unicode character: ``const a = "\u{1F4A9}"[0]; const b = "\u{1F4A9}"[1]`` If you feed such split surrogates to versions of saxes prior to 4, you'd get errors. Saxes version 4 and over are able to detect when a chunk of data ends with a surrogate and carry over the surrogate to the next chunk. However this operation entails slicing and concatenating strings. If you can feed your data in a way that does not split surrogates, you should do it. (Obviously, feeding all the data at once with a single write is fastest.) * Don't set event handlers you don't need. Saxes has always aimed to avoid doing work that will just be tossed away but future improvements hope to do this more aggressively. One way saxes knows whether or not some data is needed is by checking whether a handler has been set for a specific event. ## FAQ Q. Why has saxes dropped support for limiting the size of data chunks passed to event handlers? A. With sax you could set ``MAX_BUFFER_LENGTH`` to cause the parser to limit the size of data chunks passed to event handlers. So if you ran into a span of text above the limit, multiple ``text`` events with smaller data chunks were fired instead of a single event with a large chunk. However, that functionality had some problematic characteristics. It had an arbitrary default value. It was library-wide so all parsers created from a single instance of the ``sax`` library shared it. This could potentially cause conflicts among libraries running in the same VM but using sax for different purposes. These issues could have been easily fixed, but there were larger issues. The buffer limit arbitrarily applied to some events but not others. It would split ``text``, ``cdata`` and ``script`` events. However, if a ``comment``, ``doctype``, ``attribute`` or ``processing instruction`` were more than the limit, the parser would generate an error and you were left picking up the pieces. It was not intuitive to use. You'd think setting the limit to 1K would prevent chunks bigger than 1K to be passed to event handlers. But that was not the case. A comment in the source code told you that you might go over the limit if you passed large chunks to ``write``. So if you want a 1K limit, don't pass 64K chunks to ``write``. Fair enough. You know what limit you want so you can control the size of the data you pass to ``write``. So you limit the chunks to ``write`` to 1K at a time. Even if you do this, your event handlers may get data chunks that are 2K in size. Suppose on the previous ``write`` the parser has just finished processing an open tag, so it is ready for text. Your ``write`` passes 1K of text. You are not above the limit yet, so no event is generated yet. The next ``write`` passes another 1K of text. It so happens that sax checks buffer limits only once per ``write``, after the chunk of data has been processed. Now you've hit the limit and you get a ``text`` event with 2K of data. So even if you limit your ``write`` calls to the buffer limit you've set, you may still get events with chunks at twice the buffer size limit you've specified. We may consider reinstating an equivalent functionality, provided that it addresses the issues above and does not cause a huge performance drop for use-case scenarios that don't need it. saxes-6.0.0/commitlint.config.js000066400000000000000000000001201414202165000166050ustar00rootroot00000000000000"use strict"; module.exports = { extends: ["@commitlint/config-angular"], }; saxes-6.0.0/examples/000077500000000000000000000000001414202165000144515ustar00rootroot00000000000000saxes-6.0.0/examples/data/000077500000000000000000000000001414202165000153625ustar00rootroot00000000000000saxes-6.0.0/examples/data/docbook.rng000066400000000000000000017373671414202165000175420ustar00rootroot00000000000000
Any attribute including in any attribute in any namespace. Any element from almost any namespace
Designates the computer or chip architecture to which the element applies Designates the intended audience to which the element applies, for example, system administrators, programmers, or new users. provides a standard place for application-specific effectivity Indicates standards conformance characteristics of the element Indicates the operating system to which the element is applicable Indicates the editorial revision to which the element belongs Indicates something about the security level associated with the element to which it applies Indicates the level of user experience for which the element applies Indicates the computer vendor to which the element applies. Indicates the word size (width in bits) of the computer architecture to which the element applies Points to the element whose content is to be used as the text of the link Points to an internal link target by identifying the value of its xml:id attribute Points to one or more internal link targets by identifying the value of their xml:id attributes Identifies a link target with a URI Identifies the XLink link type simple An XLink simple link Identifies the XLink role of the link Identifies the XLink arcrole of the link Identifies the XLink title of the link new An application traversing to the ending resource should load it in a new window, frame, pane, or other relevant presentation context. replace An application traversing to the ending resource should load the resource in the same window, frame, pane, or other relevant presentation context in which the starting resource was loaded. embed An application traversing to the ending resource should load its presentation in place of the presentation of the starting resource. other The behavior of an application traversing to the ending resource is unconstrained by XLink. The application should look for other markup present in the link to determine the appropriate behavior. none The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. Identifies the XLink show behavior of the link onLoad An application should traverse to the ending resource immediately on loading the starting resource. onRequest An application should traverse from the starting resource to the ending resource only on a post-loading event triggered for the purpose of traversal. other The behavior of an application traversing to the ending resource is unconstrained by this specification. The application should look for other markup present in the link to determine the appropriate behavior. none The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. Identifies the XLink actuate behavior of the link Identifies the unique ID value of the element Specifies the DocBook version of the element and its descendants Specifies the natural language of the element and its descendants Specifies the base URI of the element and its descendants Provides the name or similar semantic identifier assigned to the content in some previous markup scheme Provides the text that is to be generated for a cross reference to the element Specifies a keyword or keywords identifying additional style information changed The element has been changed. added The element is new (has been added to the document). deleted The element has been deleted. off Explicitly turns off revision markup for this element. Identifies the revision status of the element ltr Left-to-right text rtl Right-to-left text lro Left-to-right override rlo Right-to-left override Identifies the direction of text in an element Specifies the format of the data Indentifies the location of the data by URI Identifies the location of the data by external identifier (entity name) continues Line numbering continues from the immediately preceding element with the same name. restarts Line numbering restarts (begins at 1, usually). Determines whether line numbering continues from the previous element or restarts. numbered Lines are numbered. unnumbered Lines are not numbered. Determines whether lines are numbered. Specifies the initial line number. Identifies the language (i.e. programming language) of the verbatim content. Can be used to indicate explicitly that whitespace in the verbatim environment is preserved. Whitespace must always be preserved in verbatim environments whether this attribute is specified or not. preserve Whitespace must be preserved. Specifies an identifying string for presentation purposes Specifies the width (in characters) of the element compact The spacing should be "compact". normal The spacing should be "normal". Specifies (a hint about) the spacing of the content 0 The element should be rendered in the current text flow (with the flow column width). 1 The element should be rendered across the full text page. Indicates if the element is rendered across the column or the page Identifies the language (i.e. programming language) of the content. optional The content describes an optional step or steps. required The content describes a required step or steps. Specifies if the content is required or optional. Specifies style information to be used when rendering the float Specifies the width of the element Specifies the depth of the element Specifies the width of the content rectangle Specifies the depth of the content rectangle 0 False (do not scale-to-fit; anamorphic scaling may occur) 1 True (scale-to-fit; anamorphic scaling is forbidden) Specifies the scaling factor center Centered horizontally char Aligned horizontally on the specified character justify Fully justified (left and right margins or edges) left Left aligned right Right aligned bottom Aligned on the bottom of the region middle Centered vertically top Aligned on the top of the region doi A document object identifier. isbn An international standard book number. isrn An international standard technical report number (ISO 10444). issn An international standard serial number. libraryofcongress A Library of Congress reference number. pubsnumber A publication number (an internal number or possibly organizational standard). uri A Uniform Resource Identifier Identifies the kind of bibliographic identifier Identifies the nature of the non-standard bibliographic identifier Identifies the kind of bibliographic identifier other Indicates that the identifier is some 'other' kind.
The text of the title of a section of a document or of a formal block-level element
The abbreviation of a title
The subtitle of a document
A wrapper for information about a component or other block
A wrapper for information about a component or other block with a required title
A wrapper for information about a component or other block with only a title
A wrapper for information about a component or other block with only a required title
A wrapper for information about a component or other block without a title
Identifies the controlled vocabulary used by this set's terms A set of terms describing the subject matter of a document
Specifies a ranking for this subject relative to other subjects in the same set One of a group of terms describing the subject matter of a document
A term in a group of terms describing the subject matter of a document
A set of keywords describing the content of a document
One of a set of keywords describing the content of a document
A list of operations to be performed in a well-defined sequence
A unit of action in a procedure
Alternative steps in a procedure
A wrapper for steps that occur within steps in a procedure
A portion of a document that is isolated from the main narrative flow sidebar must not occur in the descendants of sidebar
A summary
A short description or note about a person
A quotation set off from the main text
The source of a block quote or epigraph
sect1 Render as a first-level section sect2 Render as a second-level section sect3 Render as a third-level section sect4 Render as a fourth-level section sect5 Render as a fifth-level section Indicates how the bridge head should be rendered Identifies the nature of the non-standard rendering Indicates how the bridge head should be rendered other Identifies a non-standard rendering A free-floating heading
A remark (or comment) intended for presentation in a draft manuscript
A short inscription at the beginning of a document or component
Identifies the desired footnote mark A footnote footnote must not occur in the descendants of footnote example must not occur in the descendants of footnote figure must not occur in the descendants of footnote table must not occur in the descendants of footnote equation must not occur in the descendants of footnote indexterm must not occur in the descendants of footnote sidebar must not occur in the descendants of footnote task must not occur in the descendants of footnote epigraph must not occur in the descendants of footnote caution must not occur in the descendants of footnote important must not occur in the descendants of footnote note must not occur in the descendants of footnote tip must not occur in the descendants of footnote warning must not occur in the descendants of footnote
A paragraph with a title
A paragraph The root element must have a version attribute.
A paragraph that contains only text and inline markup, no block elements
Identifies the type of mark to be used on items in this list A list in which each entry is marked with a bullet or other dingbat
continues Specifies that numbering should begin where the preceding list left off restarts Specifies that numbering should begin again at 1 Indicates how list numbering should begin relative to the immediately preceding list Specifies the initial line number. ignore Specifies that numbering should ignore list nesting inherit Specifies that numbering should inherit from outer-level lists Indicates whether or not item numbering should be influenced by list nesting arabic Specifies Arabic numeration (1, 2, 3, …) upperalpha Specifies upper-case alphabetic numeration (A, B, C, …) loweralpha Specifies lower-case alphabetic numeration (a, b, c, …) upperroman Specifies upper-case Roman numeration (I, II, III, …) lowerroman Specifies lower-case Roman numeration (i, ii, iii …) Indicates the desired numeration A list in which each entry is marked with a sequentially incremented label
Specifies the keyword for the type of mark that should be used on this item, instead of the mark that would be used by default A wrapper for the elements of a list item
A segmented list, a list of sets of elements
The title of an element of a list item in a segmented list
A list item in a segmented list The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist
An element of a list item in a segmented list
horiz A tabular presentation in row-major order. vert A tabular presentation in column-major order. inline An inline presentation, usually a comma-delimited list. Specifies the type of list presentation. Specifies the number of columns for horizontal or vertical presentation An undecorated list of single words or short phrases
An element of a simple list
Indicates a length beyond which the presentation system may consider a term too long and select an alternate presentation for that term, item, or list A list in which each entry is composed of a set of one or more terms and an associated description
A wrapper for a set of terms and the associated description in a variable list
The word or phrase being defined or described in a variable list
A formal example, with a title example must not occur in the descendants of example figure must not occur in the descendants of example table must not occur in the descendants of example equation must not occur in the descendants of example caution must not occur in the descendants of example important must not occur in the descendants of example note must not occur in the descendants of example tip must not occur in the descendants of example warning must not occur in the descendants of example
A displayed example without a title
monospaced The literal layout should be formatted with a monospaced font normal The literal layout should be formatted with the current font Specifies the class of literal layout A block of text in which line breaks and white space are to be reproduced faithfully
Text that a user sees or might see on a computer screen
A representation of what the user sees or might see on a computer screen
A formal figure, generally an illustration, with a title example must not occur in the descendants of figure figure must not occur in the descendants of figure table must not occur in the descendants of figure equation must not occur in the descendants of figure caution must not occur in the descendants of figure important must not occur in the descendants of figure note must not occur in the descendants of figure tip must not occur in the descendants of figure warning must not occur in the descendants of figure
A untitled figure
A displayed media object (video, audio, image, etc.)
An inline media object (video, audio, image, and so on)
A wrapper for video data and its associated meta-information
A wrapper for audio data and its associated meta-information
A wrapper for image data and its associated meta-information
A wrapper for a text description of an object and its associated meta-information
Specifies the (horizontal) alignment of the video data Specifies the vertical alignment of the video data Determines if anamorphic scaling is forbidden Pointer to external video data
Pointer to external audio data
Specifies the (horizontal) alignment of the image data Specifies the vertical alignment of the image data Determines if anamorphic scaling is forbidden Pointer to external image data
Identifies the encoding of the text in the external file Pointer to external text data
A caption example must not occur in the descendants of caption figure must not occur in the descendants of caption table must not occur in the descendants of caption equation must not occur in the descendants of caption sidebar must not occur in the descendants of caption task must not occur in the descendants of caption caution must not occur in the descendants of caption important must not occur in the descendants of caption note must not occur in the descendants of caption tip must not occur in the descendants of caption warning must not occur in the descendants of caption
A real-world address, generally a postal address
A street address in an address
A post office box in an address
A postal code in an address
The name of a city in an address
A state or province in an address
The name of a country
A telephone number
A fax number
Uncategorized information in address
The institutional affiliation of an individual
A brief description of an affiliation
The title of an individual in an organization
consortium A consortium corporation A corporation informal An informal organization nonprofit A non-profit organization Specifies the nature of the organization Specifies the nature of the organization other Indicates a non-standard organization class Identifies the non-standard nature of the organization The name of an organization
A division of an organization
The page numbers of an article as published
The personal name of an individual
The name of an individual author
Wrapper for author information when a document has multiple authors or collabarators
Identifies a collaborator
The initials or other short identifier for an author
A person and associated metadata
An organization and associated metadata
A wrapper for document meta-information about a conference
The dates of a conference for which a document was written
The title of a conference for which a document was written
An identifier, frequently numerical, associated with a conference for which a document was written
The sponsor of a conference for which a document was written
The contract number of a document
The sponsor of a contract
Copyright information about a document
The year of publication of a document
The name of the individual or organization that holds a copyright
Additional content for the cover of a publication
The date of publication or revision of a document
The name or number of an edition of a document
The name of the editor of a document
An identifier for a document
A citation of a bibliographic identifier
The source of a document
hasformat The described resource pre-existed the referenced resource, which is essentially the same intellectual content presented in another format haspart The described resource includes the referenced resource either physically or logically hasversion The described resource has a version, edition, or adaptation, namely, the referenced resource isformatof The described resource is the same intellectual content of the referenced resource, but presented in another format ispartof The described resource is a physical or logical part of the referenced resource isreferencedby The described resource is referenced, cited, or otherwise pointed to by the referenced resource isreplacedby The described resource is supplanted, displaced, or superceded by the referenced resource isrequiredby The described resource is required by the referenced resource, either physically or logically isversionof The described resource is a version, edition, or adaptation of the referenced resource; changes in version imply substantive changes in content rather than differences in format references The described resource references, cites, or otherwise points to the referenced resource replaces The described resource supplants, displaces, or supersedes the referenced resource requires The described resource requires the referenced resource to support its function, delivery, or coherence of content Identifies the type of relationship Identifies the type of relationship othertype The described resource has a non-standard relationship with the referenced resource A keyword that identififes the type of the non-standard relationship The relationship of a document to another
dcmipoint The DCMI Point identifies a point in space using its geographic coordinates iso3166 ISO 3166 Codes for the representation of names of countries dcmibox The DCMI Box identifies a region of space using its geographic limits tgn The Getty Thesaurus of Geographic Names Specifies the type of spatial coverage Specifies the type of spatial coverage otherspatial Identifies a non-standard type of coverage A keyword that identifies the type of non-standard coverage dcmiperiod A specification of the limits of a time interval w3c-dtf W3C Encoding rules for dates and times—a profile based on ISO 8601 Specifies the type of temporal coverage Specifies the type of temporal coverage othertemporal Specifies a non-standard type of coverage A keyword that identifies the type of non-standard coverage The spatial or temporal coverage of a document
A statement of legal obligations or requirements
copyeditor A copy editor graphicdesigner A graphic designer other Some other contributor productioneditor A production editor technicaleditor A technical editor translator A translator Identifies the nature of the contributor Identifies the nature of the non-standard contribution Identifies the nature of the contributor other Identifies a non-standard contribution A person or entity, other than an author or editor, credited in a document
The numbers of the pages in a book, for use in a bibliographic entry
A summary of the contributions made to a document by a credited source
The title of a person
The first name of a person
A family name; in western cultures the last name
The portion of a person's name indicating a relationship to ancestors
A component of a persons name that is not a first name, surname, or lineage
The printing history of a document
The date of publication of a document
The publisher of a document
The name of the publisher of a document
Information about a particular release of a document
A history of the revisions to a document
An entry describing a single revision in the history of the revisions to a document
A document revision number
A description of a revision to a document
A extended description of a revision to a document
Numbers of the volumes in a series of books
The volume number of a document in a set (as of books in a set or articles in a journal)
The number of an issue of a journal
A software or application package
An email address
A comment on a line in a verbatim listing
command A command function A function option An option Identifies the class of parameter A value or a symbolic reference to a value
command A command function A function option An option parameter A parameter Identifies the nature of the replaceable text Content that may or must be replaced by the user
Identifies the type of URI specified A Uniform Resource Identifier
An abbreviation, especially one followed by a period
An often pronounceable word made from the initial (or selected) letters of a name or phrase
An inline bibliographic reference to another published work
A citation to a reference page
The title of a reference page
A reference volume number
article An article bbs A bulletin board system book A book cdrom A CD-ROM chapter A chapter (as of a book) dvd A DVD emailmessage An email message gopher A gopher page journal A journal manuscript A manuscript newsposting A posting to a newsgroup part A part (as of a book) refentry A reference entry section A section (as of a book or article) series A series set A set (as of books) webpage A web page wiki A wiki page Identifies the nature of the publication being cited The title of a cited work
Emphasized text
A limited span of emphasized text
A word or phrase in a language other than the primary language of the document
A span of text
A limited span of text
An inline quotation
A subscript (as in H2 O, the molecular formula for water)
A superscript (as in x^2, the mathematical notation for x multiplied by itself)
copyright A copyright registered A registered copyright service A service trade A trademark Identifies the class of trade mark A trademark
A word meant specifically as a word and not representing anything else
A cross reference to a footnote (a footnote mark) @linkend on footnoteref must point to a footnote.
A cross reference to another part of the document
A hypertext link
Holds additional information that may be used by the applicatoin when resolving the link Specifies the URI of the document in which the link target appears Specifies the location of the link target in the document Identifies application-specific customization of the link behavior A link that addresses its target indirectly
A spot in the document
A text-only annotation, often used for accessibility
Identifies the editorial or publication status of the element on which it occurs
A collection of books The root element must have a version attribute.
A book The root element must have a version attribute.
The dedication of a book or other component The root element must have a version attribute.
Acknowledgements of a book or other component The root element must have a version attribute.
Text at the back of a book describing facts about its production The root element must have a version attribute.
An appendix in a Book or Article The root element must have a version attribute.
A chapter, as of a book The root element must have a version attribute.
A division in a book The root element must have a version attribute.
Introductory matter preceding the first chapter of a book The root element must have a version attribute.
An introduction to the contents of a part
A recursive section The root element must have a version attribute.
A section of a document with no subdivisions
faq A collection of frequently asked questions. journalarticle An article in a journal or other periodical. productsheet A description of a product. specification A specification. techreport A technical report. whitepaper A white paper. Identifies the nature of the article An article The root element must have a version attribute.
Identifies one or more annotations that apply to this element
Identifies one ore more elements to which this annotation applies An annotation annotation must not occur in the descendants of annotation
Specifies the XLink traversal-from Specifies the XLink label Specifies the XLink traversal-to
Identifies the XLink link type extended An XLink extended link An XLink extended link
Identifies the XLink link type locator An XLink locator link An XLink locator in an extendedlink
Identifies the XLink link type arc An XLink arc link An XLink arc in an extendedlink
A top-level section of document The root element must have a version attribute.
A subsection within a Sect1 The root element must have a version attribute.
A subsection within a Sect2 The root element must have a version attribute.
A subsection within a Sect3 The root element must have a version attribute.
A subsection within a Sect4 The root element must have a version attribute.
A collection of reference entries The root element must have a version attribute.
A reference page (originally a UNIX man-style reference page) The root element must have a version attribute.
Meta-information for a reference entry
source The name of the software product or component to which this topic applies version The version of the software product or component to which this topic applies manual The section title of the reference page (e.g., User Commands) sectdesc The section title of the reference page (believed synonymous with "manual" but in wide use) software The name of the software product or component to which this topic applies (e.g., SunOS x.y; believed synonymous with "source" but in wide use) Identifies the kind of miscellaneous information Identifies the nature of non-standard miscellaneous information Identifies the kind of miscellaneious information other Indicates that the information is some 'other' kind.
Meta-information for a reference entry other than the title and volume number
The name, purpose, and classification of a reference page
A description of the topic of a reference page
The name of (one of) the subject(s) of a reference page
A short (one sentence) synopsis of the topic of a reference page
The scope or other indication of applicability of a reference entry
A syntactic synopsis of the subject of the reference page
A recursive section in a refentry The root element must have a version attribute.
A major subsection of a reference entry The root element must have a version attribute.
A subsection of a refsect1 The root element must have a version attribute.
A subsection of a refsect2 The root element must have a version attribute.
Specifies the base form of the term, the one that appears in the glossary. This allows adjectival, plural, and other variations of the term to appear in the element. The element content is the default base form.
A wrapper for a list of glossary entries
Specifies the string by which the element's content is to be sorted; if unspecified, the content is used An entry in a Glossary or GlossList
Specifies a list of keywords for the definition A definition in a GlossEntry
Identifies the other term A cross-reference from one glossentry to another @otherterm on glosssee must point to a glossentry.
Identifies the other term A cross-reference from one GlossEntry to another @otherterm on glossseealso must point to a glossentry.
The first occurrence of a term @linkend on firstterm must point to a glossentry.
A glossary term @linkend on glossterm must point to a glossentry.
A glossary The root element must have a version attribute.
A division in a Glossary
An inline definition of a term A termdef must contain exactly one firstterm
Identifies the relationship between the bibliographic elemnts
An entry in a Bibliography
An entry in a Bibliography
A raw container for related bibliographic information
A cooked container for related bibliographic information
Untyped bibliographic information
A bibliography The root element must have a version attribute.
A section of a Bibliography
A wrapper for a list of bibliography entries
The units (for example, pages) used to identify the beginning and ending of a reference. Identifies the beginning of a reference; the location within the work that is being referenced. Identifies the end of a reference. A cross-reference to a bibliographic entry
normal Normal preferred Preferred Specifies the significance of the term Specifies the IDs of the elements to which this term applies Indicates the page on which this index term occurs in some version of the printed document all All indexes global The global index (as for a combined index of a set of box) local The local index (the index for this document only) Specifies the scope of the index term Specifies the string by which the term is to be sorted; if unspecified, the term content is used Specifies the target index for this term
A set of index terms in the meta-information of a document
Identifies the class of index term singular A singular index term A wrapper for an indexed term
Identifies the class of index term startofrange The start of a range A wrapper for an indexed term that covers a range
Identifies the class of index term endofrange The end of a range Points to the start of the range Identifies the end of a range associated with an indexed term
The primary word or phrase under which an index term should be sorted
A secondary word or phrase in an index term
A tertiary word or phrase in an index term
Part of an index term directing the reader instead to another entry in the index
Part of an index term directing the reader also to another entry in the index
An index to a book or part of a book The root element must have a version attribute.
An index to a set of books The root element must have a version attribute.
A division in an index
An entry in an index
A primary term in an index entry, not in the text
A secondary term in an index entry, rather than in the text
A tertiary term in an index entry, rather than in the text
A See entry in an index, rather than in the text
A See also entry in an index, rather than in the text
Indicates the page on which this element occurs in some version of the printed document
A table of contents The root element must have a version attribute.
A division in a table of contents
A component title in a table of contents
A task to be completed
A summary of a task
The prerequisites for a task
Information related to a task
calspair Coordinates expressed as a pair of CALS graphic coordinates. linecolumn Coordinates expressed as a line and column. linecolumnpair Coordinates expressed as a pair of lines and columns. linerange Coordinates expressed as a line range. Identifies the units used in the coords attribute The default units vary according to the type of callout specified: calspair for graphics and linecolumn for line-oriented elements. Indicates that non-standard units are used for this area . In this case otherunits must be specified. other Coordinates expressed in some non-standard units. Identifies the units used in the coords attribute when the units attribute is other . This attribute is forbidden otherwise.
A list of callout s
Identifies the areas described by this callout. A called out description of a marked Area
A program listing with associated areas used in callouts
A collection of regions in a graphic or code example
Point to the callout s which refer to this area. (This provides bidirectional linking which may be useful in online presentation.) Specifies an identifying number or string that may be used in presentation. The area label might be drawn on top of the figure, for example, at the position indicated by the coords attribute. Provides the coordinates of the area. The coordinates must be interpreted using the units specified. A region defined for a Callout in a graphic or code example
A region defined for a Callout in a graphic or code example
A set of related areas in a graphic or code example
A screen with associated areas used in callouts
A wrapper for an image object with callouts
The location of a callout embedded in text
A cross reference to a co
A set of EBNF productions
A production in a set of EBNF productions
The left-hand side of an EBNF production
The right-hand side of an EBNF production
Specifies a URI that points to a production where the nonterminal is defined A non-terminal in an EBNF production
A constraint in an EBNF production
A cross-reference to an EBNF production
The definition of a constraint in an EBNF production
Specifies the alignment character when align is set to char . Specifies the percentage of the column's total width that should appear to the left of the first occurance of the character identified in char when align is set to char . 0 100 Specifies how the table is to be framed. Note that there is no way to obtain a border on only the starting edge (left, in left-to-right writing systems) of the table. all Frame all four sides of the table. In some environments with limited control over table border formatting, such as HTML, this may imply additional borders. bottom Frame only the bottom of the table. none Place no border on the table. In some environments with limited control over table border formatting, such as HTML, this may disable other borders as well. sides Frame the left and right sides of the table. top Frame the top of the table. topbot Frame the top and bottom of the table. Specifies the presence or absence of the column separator 0 No column separator rule. 1 Provide a column separator rule on the right Specifies the presence or absence of the row separator 0 No row separator rule. 1 Provide a row separator rule below Specifies the orientation of the table land 90 degrees counter-clockwise from the rest of the text flow. port The same orientation as the rest of the text flow. Specifies the table style Indicates whether or not the entries in the first column should be considered row headers firstcol Indicates that entries in the first column of the table are functionally row headers (analogous to the way that a thead provides column headers). norowheader Indicates that entries in the first column have no special significance with respect to column headers. Specifies the horizontal alignment of text in an entry. center Centered. char Aligned on a particular character. justify Left and right justified. left Left justified. right Right justified. Specifies the vertical alignment of text in an entry. bottom Aligned on the bottom of the entry. middle Aligned in the middle. top Aligned at the top of the entry. Specifies a column specification by name. Specifies a starting column by name. Specifies a span by name. Specifies a starting column by name. Specifies an ending column by name. Provides a name for a column specification. Provides a name for a span specification.
Additional style information for downstream processing; typically the name of a style. The number of columns in the table. Must be an integer greater than zero. A wrapper for the main content of a table, or part of a table
The number of the column to which this specification applies. Must be greater than any preceding column number. Defaults to one more than the number of the preceding column, if there is one, or one. Specifies the width of the column. Specifications for a column in a table
Specifies a starting column by name. Specifies an ending column by name. Formatting information for a spanned column in a table
A table header consisting of one or more rows
A table footer consisting of one or more rows
A wrapper for the rows of a table or informal table
A row in a table
Specifies the number of additional rows which this entry occupies. Defaults to zero. Specifies the rotation of this entry. A value of 1 (true) rotates the cell 90 degrees counter-clockwise. A value of 0 (false) leaves the cell unrotated. 0 Do not rotate the cell. 1 Rotate the cell 90 degrees counter-clockwise. A cell in a table
Additional style information for downstream processing; typically the name of a style. The number of columns in the entry table. Must be an integer greater than zero. A subtable appearing in place of an Entry in a table
A table header consisting of one or more rows
A wrapper for the rows of a table or informal table
A row in a table
Indicates if the short or long title should be used in a List of Tables 0 Indicates that the full title should be used. 1 Indicates that the short short title (titleabbrev) should be used. Indicates if the table should appear in a List of Tables 0 Indicates that the table should not occur in the List of Tables. 1 Indicates that the table should appear in the List of Tables. A formal table in a document example must not occur in the descendants of table figure must not occur in the descendants of table equation must not occur in the descendants of table informaltable must not occur in the descendants of table caution must not occur in the descendants of table important must not occur in the descendants of table note must not occur in the descendants of table tip must not occur in the descendants of table warning must not occur in the descendants of table
A table without a title
This attribute assigns a class name or set of class names to an element. Any number of elements may be assigned the same class name or names. Multiple class names must be separated by white space characters. This attribute specifies style information for the current element. This attribute offers advisory information about the element for which it is set. This attribute specifies the base language of an element's attribute values and text content. The default value of this attribute is unknown. Occurs when the pointing device button is clicked over an element. Occurs when the pointing device button is double clicked over an element. Occurs when the pointing device button is pressed over an element. Occurs when the pointing device button is released over an element. Occurs when the pointing device is moved onto an element. Occurs when the pointing device is moved while it is over an element. Occurs when the pointing device is moved away from an element. Occurs when a key is pressed and released over an element. Occurs when a key is pressed down over an element. Occurs when a key is released over an element. Specifies the alignment of data and the justification of text in a cell. left Left-flush data/Left-justify text. This is the default value for table data. center Center data/Center-justify text. This is the default value for table headers. right Right-flush data/Right-justify text. justify Double-justify text. char Align text around a specific character. If a user agent doesn't support character alignment, behavior in the presence of this value is unspecified. This attribute specifies a single character within a text fragment to act as an axis for alignment. The default value for this attribute is the decimal point character for the current language as set by the lang attribute (e.g., the period in English and the comma in French). User agents are not required to support this attribute. When present, this attribute specifies the offset to the first occurrence of the alignment character on each line. If a line doesn't include the alignment character, it should be horizontally shifted to end at the alignment position. When charoff is used to set the offset of an alignment character, the direction of offset is determined by the current text direction (set by the dir attribute). In left-to-right texts (the default), offset is from the left margin. In right-to-left texts, offset is from the right margin. User agents are not required to support this attribute. [0-9]+% Specifies the vertical position of data within a cell. top Cell data is flush with the top of the cell. middle Cell data is centered vertically within the cell. This is the default value. bottom Cell data is flush with the bottom of the cell. baseline All cells in the same row as a cell whose valign attribute has this value should have their textual data positioned so that the first text line occurs on a baseline common to all cells in the row. This constraint does not apply to subsequent text lines in these cells. Provides a summary of the table's purpose and structure for user agents rendering to non-visual media such as speech and Braille. Specifies the desired width of the entire table and is intended for visual user agents. When the value is a percentage value, the value is relative to the user agent's available horizontal space. In the absence of any width specification, table width is determined by the user agent. [0-9]+% Specifies the width (in pixels only) of the frame around a table. Specifies which sides of the frame surrounding a table will be visible. void No sides. This is the default value. above The top side only. below The bottom side only. hsides The top and bottom sides only. lhs The left-hand side only. rhs The right-hand side only. vsides The right and left sides only. box All four sides. border All four sides. Specifies which rules will appear between cells within a table. The rendering of rules is user agent dependent. none No rules. This is the default value. groups Rules will appear between row groups (see thead, tfoot, and tbody) and column groups (see colgroup and col) only. rows Rules will appear between rows only. cols Rules will appear between columns only. all Rules will appear between all rows and columns. Specifies how much space the user agent should leave between the left side of the table and the left-hand side of the leftmost column, the top of the table and the top side of the topmost row, and so on for the right and bottom of the table. The attribute also specifies the amount of space to leave between cells. [0-9]+% Specifies the amount of space between the border of the cell and its contents. If the value of this attribute is a pixel length, all four margins should be this distance from the contents. If the value of the attribute is a percentage length, the top and bottom margins should be equally separated from the content based on a percentage of the available vertical space, and the left and right margins should be equally separated from the content based on a percentage of the available horizontal space. [0-9]+% Provides an abbreviated form of the cell's content and may be rendered by user agents when appropriate in place of the cell's content. Abbreviated names should be short since user agents may render them repeatedly. For instance, speech synthesizers may render the abbreviated headers relating to a particular cell before rendering that cell's content. This attribute may be used to place a cell into conceptual categories that can be considered to form axes in an n-dimensional space. User agents may give users access to these categories (e.g., the user may query the user agent for all cells that belong to certain categories, the user agent may present a table in the form of a table of contents, etc.). Please consult an HTML reference for more details. Specifies the list of header cells that provide header information for the current data cell. The value of this attribute is a space-separated list of cell names; those cells must be named by setting their id attribute. Authors generally use the headers attribute to help non-visual user agents render header information about data cells (e.g., header information is spoken prior to the cell data), but the attribute may also be used in conjunction with style sheets. Specifies the set of data cells for which the current header cell provides header information. This attribute may be used in place of the headers attribute, particularly for simple tables. row The current cell provides header information for the rest of the row that contains it col The current cell provides header information for the rest of the column that contains it. rowgroup The header cell provides header information for the rest of the row group that contains it. colgroup The header cell provides header information for the rest of the column group that contains it. Specifies the number of rows spanned by the current cell. The default value of this attribute is one (1 ). The value zero (0 ) means that the cell spans all rows from the current row to the last row of the table section (thead , tbody , or tfoot ) in which the cell is defined. Specifies the number of columns spanned by the current cell. The default value of this attribute is one (1 ). The value zero (0 ) means that the cell spans all columns from the current column to the last column of the column group (colgroup ) in which the cell is defined.
A formal (captioned) HTML table in a document example must not occur in the descendants of table figure must not occur in the descendants of table equation must not occur in the descendants of table informaltable must not occur in the descendants of table caution must not occur in the descendants of table important must not occur in the descendants of table note must not occur in the descendants of table tip must not occur in the descendants of table warning must not occur in the descendants of table
An HTML table without a title
An HTML table caption example must not occur in the descendants of caption figure must not occur in the descendants of caption table must not occur in the descendants of caption equation must not occur in the descendants of caption sidebar must not occur in the descendants of caption task must not occur in the descendants of caption caution must not occur in the descendants of caption important must not occur in the descendants of caption note must not occur in the descendants of caption tip must not occur in the descendants of caption warning must not occur in the descendants of caption
This attribute, whose value must be an integer > 0, specifies the number of columns spanned by the col element; the col element shares its attributes with all the columns it spans. The default value for this attribute is 1 (i.e., a single column). If the span attribute is set to N > 1, the current col element shares its attributes with the next N-1 columns. Specifies a default width for each column spanned by the current col element. It has the same meaning as the width attribute for the colgroup element and overrides it. Specifications for a column in an HTML table
This attribute, which must be an integer > 0, specifies the number of columns in a column group. In the absence of a span attribute, each colgroup defines a column group containing one column. If the span attribute is set to N > 0, the current colgroup element defines a column group containing N columns. User agents must ignore this attribute if the colgroup element contains one or more col elements. This attribute specifies a default width for each column in the current column group. In addition to the standard pixel, percentage, and relative values, this attribute allows the special form 0* (zero asterisk) which means that the width of the each column in the group should be the minimum width necessary to hold the column's contents. This implies that a column's entire contents must be known before its width may be correctly computed. Authors should be aware that specifying 0* will prevent visual user agents from rendering a table incrementally. This attribute is overridden for any column in the column group whose width is specified via a col element. A group of columns in an HTML table
A table header consisting of one or more rows in an HTML table
A table footer consisting of one or more rows in an HTML table
A wrapper for the rows of an HTML table or informal HTML table
A row in an HTML table
A table header entry in an HTML table
A table entry in an HTML table
A detailed set of messages, usually error messages
A wrapper for an entry in a message set
The audience to which the message relevant The origin of the message The level of importance or severity of a message A wrapper for a simpler entry in a message set
A message in a message set
The primary component of a message in a message set
A subcomponent of a message in a message set
A related component of a message in a message set
The actual text of a message component in a message set
Information about a message in a message set
The level of importance or severity of a message in a message set
The origin of a message in a message set
The audience to which a message in a message set is relevant
Explanatory material relating to a message in a message set
none No labels number Numeric labels qanda "Q:" and "A:" labels Specifies the default labelling A question-and-answer set
A titled division in a QandASet
A question/answer set within a QandASet
A question in a QandASet
An answer to a question posed in a QandASet
A label on a Question or Answer
A displayed mathematical equation example must not occur in the descendants of equation figure must not occur in the descendants of equation table must not occur in the descendants of equation equation must not occur in the descendants of equation caution must not occur in the descendants of equation important must not occur in the descendants of equation note must not occur in the descendants of equation tip must not occur in the descendants of equation warning must not occur in the descendants of equation
A displayed mathematical equation without a title
A mathematical equation or expression occurring inline
A mathematical phrase, an expression that can be represented with ordinary text and a small amount of markup
Specifies that the format of the data is MathML mathml Specifies MathML. A MathML expression in a media object
Any element from the MathML namespace
Specifies that the format of the data is SVG svg Specifies SVG. An SVG drawing in a media object
Any element from the SVG namespace
A string of formatting markup in text that is to be represented literally
attribute An attribute attvalue An attribute value element An element emptytag An empty element tag endtag An end tag genentity A general entity localname The local name part of a qualified name namespace A namespace numcharref A numeric character reference paramentity A parameter entity pi A processing instruction prefix The prefix part of a qualified name comment An SGML comment starttag A start tag xmlpi An XML processing instruction Identifies the nature of the tag content Identifies the namespace of the tag content A component of XML (or SGML) markup
Identifies the class of symbol limit The value is a limit of some kind A name that is replaced by a value before processing
A unit of information
Inline text that is some literal value
Identifies the (computer) language of the code fragment An inline code fragment
Identifies the class of constant limit The value is a limit of some kind A programming or system constant
copyright A name with a copyright registered A name with a registered copyright service A name of a service trade A name which is trademarked Specifies the class of product name The formal name of a product
A number assigned to a product
altkey An alternate or secondary key constraint A constraint datatype A data type field A field foreignkey A foreign key group A group index An index key1 The first or primary key key2 An alternate or secondary key name A name primarykey The primary key procedure A (stored) procedure record A record rule A rule secondarykey The secondary key table A table user A user view A view Identifies the class of database artifact The name of a database, or part of a database
hardware A hardware application software A software application Identifies the class of application The name of a software program
A physical part of a computer system
The text on a button in a GUI
Graphic and/or text appearing as a icon in a GUI
The text of a label in a GUI
The name of a menu in a GUI
The name of a terminal menu item in a GUI
The name of a submenu in a GUI
A selection or series of selections from a menu
The conventional name of a mouse button
alt The "Alt" key backspace The "Backspace" key command The "Command" key control The "Control" key delete The "Delete" key down The down arrow end The "End" key enter The "Enter" or "Return" key escape The "Escape" key home The "Home" key insert The "Insert" key left The left arrow meta The "Meta" key option The "Option" key pagedown The page down key pageup The page up key right The right arrow shift The "Shift" key space The spacebar tab The "Tab" key up The up arrow Identifies the function key Identifies the function key other Indicates a non-standard function key Specifies a keyword that identifies the non-standard key The text printed on a key on a keyboard
The internal, frequently numeric, identifier for a key on a keyboard
click A (single) mouse click. double-click A double mouse click. press A mouse or key press. seq Sequential clicks or presses. simul Simultaneous clicks or presses. Identifies the nature of the action taken. If keycombo contains more than one element, simul is the default, otherwise there is no default. Identifies the nature of the action taken other Indicates a non-standard action Identifies the non-standard action in some unspecified way. A combination of input actions
The symbolic name of a key on a keyboard
A graphical user interface (GUI) keyboard shortcut
A key combination for an action that is also accessible through a menu
A character or string indicating the start of an input field in a computer display
A software environment variable
devicefile A device directory A directory extension A filename extension headerfile A header file (as for a programming language) libraryfile A library file partition A partition (as of a hard disk) symlink A symbolic link Identifies the class of filename Specifies the path of the filename The name of a file
The name of an executable program or other software command
Data, generally text, displayed or presented by a computer
Data entered by the user
Specifies the character that should separate the command and its top-level arguments Indicates the displayed length of the command; this information may be used to intelligently indent command synopses which extend beyond one line A syntax summary for a software command
norepeat Can not be repeated. repeat Can be repeated. Indicates whether or not repetition is possible. opt Formatted to indicate that it is optional. plain Formatted without indication. req Formatted to indicate that it is required. Indicates optionality. Indicates optionality.
An argument in a CmdSynopsis
A group of elements in a CmdSynopsis
An explicit line break in a command synopsis
A portion of a CmdSynopsis broken out from the main body of the synopsis
A reference to a fragment of a command synopsis @linkend on synopfragmentref must point to a synopfragment.
A general-purpose element for representing the syntax of commands or functions
The syntax summary for a function definition
Information supplementing the FuncDefs of a FuncSynopsis
The prototype of a function
A function (subroutine) name and its return type
The name of a function or subroutine, as in a programming language
An empty element in a function synopsis indicating that the function in question takes no arguments
An empty element in a function synopsis indicating a variable number of arguments
opt Formatted to indicate that it is optional. req Formatted to indicate that it is required. Indicates optionality. Information about a function parameter in a programming language
Parameters for a function referenced through a function pointer in a synopsis
class This is the synopsis of a class interface This is the synopsis of an interface Specifies the nature of the synopsis The syntax summary for a class definition
Information supplementing the contents of a ClassSynopsis
A class in an object-oriented programming language
An interface in an object-oriented programming language
An exception in an object-oriented programming language
Can be used to indicate that whitespace in the modifier should be preserved (for multi-line annotations, for example). preserve Extra whitespace and line breaks must be preserved.
Modifiers in a synopsis
The name of an interface
The name of an exception
The name of a field in a class definition
The initializer for a FieldSynopsis
A syntax summary for a constructor
A syntax summary for a destructor
A syntax summary for a method
The name of a method
Parameters to a method
The name of a variable
The value returned by a function
The classification of a value
The name of a class, in the object-oriented programming sense
A literal listing of all or part of a program
A note of caution caution must not occur in the descendants of caution important must not occur in the descendants of caution note must not occur in the descendants of caution tip must not occur in the descendants of caution warning must not occur in the descendants of caution
An admonition set off from the text caution must not occur in the descendants of important important must not occur in the descendants of important note must not occur in the descendants of important tip must not occur in the descendants of important warning must not occur in the descendants of important
A message set off from the text caution must not occur in the descendants of note important must not occur in the descendants of note note must not occur in the descendants of note tip must not occur in the descendants of note warning must not occur in the descendants of note
A suggestion to the user, set off from the text caution must not occur in the descendants of tip important must not occur in the descendants of tip note must not occur in the descendants of tip tip must not occur in the descendants of tip warning must not occur in the descendants of tip
An admonition set off from the text caution must not occur in the descendants of warning important must not occur in the descendants of warning note must not occur in the descendants of warning tip must not occur in the descendants of warning warning must not occur in the descendants of warning
An error code
An error name
An error message.
The classification of an error message
daemon A daemon or other system process (syslogd) domainname A domain name (example.com) etheraddress An ethernet address (00:05:4E:49:FD:8E) event An event of some sort (SIGHUP) eventhandler An event handler of some sort (hangup) filesystem A filesystem (ext3) fqdomainname A fully qualified domain name (my.example.com) groupname A group name (wheel) ipaddress An IP address (127.0.0.1) library A library (libncurses) macro A macro netmask A netmask (255.255.255.192) newsgroup A newsgroup (comp.text.xml) osname An operating system name (Hurd) process A process (gnome-cups-icon) protocol A protocol (ftp) resource A resource server A server (mail.example.com) service A service (ppp) systemname A system name (hephaistos) username A user name (ndw) Identifies the nature of the system item A system-related item or term
An option for a software command
Optional information
A unit of data associated with some part of a computer system
saxes-6.0.0/examples/dump-events.js000066400000000000000000000007371414202165000172650ustar00rootroot00000000000000"use strict"; /* eslint-disable no-console */ const fs = require("fs"); const saxes = require("../build/dist/saxes"); const xml = fs.readFileSync(process.argv[2]); const start = Date.now(); const parser = new saxes.SaxesParser({ xmlns: true }); for (const ev of saxes.EVENTS) { parser.on(ev, console.log.bind(console.log, ev)); } parser.on("error", err => { console.error(err); }); parser.write(xml); parser.close(); console.log(`Parsing time: ${Date.now() - start}`); saxes-6.0.0/examples/example.js000066400000000000000000000014041414202165000164410ustar00rootroot00000000000000"use strict"; /* eslint-disable no-console */ const fs = require("fs"); const path = require("path"); const saxes = require("../build/dist/saxes"); const parser = new saxes.SaxesParser(); const inspector = ev => function handler(data) { console.error("%s %s %j", `${parser.line}:${parser.column}`, ev, data); }; saxes.EVENTS.forEach(ev => { parser.on(ev, inspector(ev)); }); parser.on("end", () => { console.error("end"); console.error(parser); }); let xml = fs.readFileSync(path.join(__dirname, "test.xml"), "utf8"); function processChunk() { if (xml) { const c = Math.ceil(Math.random() * 1000); parser.write(xml.substr(0, c)); xml = xml.substr(c); process.nextTick(processChunk); } else { parser.close(); } } processChunk(); saxes-6.0.0/examples/null-parser.js000066400000000000000000000024071414202165000172560ustar00rootroot00000000000000"use strict"; /* eslint-disable no-console */ const fs = require("fs"); const saxes = require("../build/dist/saxes"); const { argv } = process; let bs; const first = argv[2]; let filePath = first; if (first.startsWith("--bs=")) { bs = Number(first.substring(first.indexOf("=") + 1)); if (Number.isNaN(bs)) { throw new Error("bs is not a number"); } // eslint-disable-next-line prefer-destructuring filePath = argv[3]; } if (bs === undefined) { const xml = fs.readFileSync(filePath); const start = Date.now(); const parser = new saxes.SaxesParser({ xmlns: true }); parser.on("error", err => { console.error(err); }); parser.write(xml); parser.close(); console.log(`Parsing time: ${Date.now() - start}`); } else { const input = fs.createReadStream(filePath); const start = Date.now(); const parser = new saxes.SaxesParser({ xmlns: true }); parser.on("error", err => { console.error(err); }); input.on("readable", () => { // eslint-disable-next-line no-constant-condition while (true) { const chunk = input.read(bs); if (chunk === null) { return; } parser.write(chunk); } }); input.on("end", () => { parser.close(); console.log(`Parsing time: ${Date.now() - start}`); }); } saxes-6.0.0/examples/test.xml000066400000000000000000001443121414202165000161570ustar00rootroot00000000000000 ]> Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  Some Text are ok in here. ]]> Pre-Text & Inlined text Post-text.  saxes-6.0.0/package-lock.json000066400000000000000000014771351414202165000160710ustar00rootroot00000000000000{ "name": "saxes", "version": "6.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "saxes", "version": "6.0.0", "license": "ISC", "dependencies": { "xmlchars": "^2.2.0" }, "devDependencies": { "@commitlint/cli": "^14.1.0", "@commitlint/config-angular": "^14.1.0", "@types/chai": "^4.2.22", "@types/mocha": "^9.0.0", "@types/node": "^16.11.6", "@typescript-eslint/eslint-plugin": "^5.3.0", "@typescript-eslint/eslint-plugin-tslint": "^5.3.0", "@typescript-eslint/parser": "^5.3.0", "@xml-conformance-suite/js": "^3.0.0", "@xml-conformance-suite/mocha": "^3.0.0", "@xml-conformance-suite/test-data": "^3.0.0", "chai": "^4.3.4", "conventional-changelog-cli": "^2.1.1", "eslint": "^8.2.0", "eslint-config-lddubeau-base": "^6.1.0", "eslint-config-lddubeau-ts": "^2.0.2", "eslint-import-resolver-typescript": "^2.5.0", "eslint-plugin-import": "^2.25.2", "eslint-plugin-jsx-a11y": "^6.4.1", "eslint-plugin-prefer-arrow": "^1.2.3", "eslint-plugin-react": "^7.26.1", "eslint-plugin-simple-import-sort": "^7.0.0", "husky": "^7.0.4", "mocha": "^9.1.3", "renovate-config-lddubeau": "^1.0.0", "simple-dist-tag": "^1.0.2", "ts-node": "^10.4.0", "tsd": "^0.18.0", "tslint": "^6.1.3", "tslint-microsoft-contrib": "^6.2.0", "typedoc": "^0.22.8", "typescript": "^4.4.4" }, "engines": { "node": ">=v12.22.7" } }, "node_modules/@babel/code-frame": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", "dev": true, "dependencies": { "@babel/highlight": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { "version": "7.15.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.15.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { "color-convert": "^1.9.0" }, "engines": { "node": ">=4" } }, "node_modules/@babel/highlight/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" }, "engines": { "node": ">=4" } }, "node_modules/@babel/highlight/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { "color-name": "1.1.3" } }, "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, "engines": { "node": ">=0.8.0" } }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/@babel/highlight/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "dependencies": { "has-flag": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/@babel/runtime": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", "dev": true, "dependencies": { "regenerator-runtime": "^0.13.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/runtime-corejs3": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.0.tgz", "integrity": "sha512-Oi2qwQ21X7/d9gn3WiwkDTJmq3TQtYNz89lRnoFy8VeZpWlsyXvzSwiRrRZ8cXluvSwqKxqHJ6dBd9Rv+p0ZGQ==", "dev": true, "dependencies": { "core-js-pure": "^3.19.0", "regenerator-runtime": "^0.13.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@commitlint/cli": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-14.1.0.tgz", "integrity": "sha512-Orq62jkl9qAGvjFqhehtAqjGY/duJ8hIRPPIHmGR2jIB96D4VTmazS3ZvqJz2Q9kKr61mLAk/171zm0FVzQCYA==", "dev": true, "dependencies": { "@commitlint/format": "^14.1.0", "@commitlint/lint": "^14.1.0", "@commitlint/load": "^14.1.0", "@commitlint/read": "^14.0.0", "@commitlint/types": "^14.0.0", "lodash": "^4.17.19", "resolve-from": "5.0.0", "resolve-global": "1.0.0", "yargs": "^17.0.0" }, "bin": { "commitlint": "cli.js" }, "engines": { "node": ">=v12" } }, "node_modules/@commitlint/config-angular": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@commitlint/config-angular/-/config-angular-14.1.0.tgz", "integrity": "sha512-LuI3W0uUR12LAqL9AEtbf+AfvkUzRkzkp/C1//Q7t0nC4+BXrN4MtF0V8B5VHeEqBdVqDzL1w0B1G446OrZmCA==", "dev": true, "dependencies": { "@commitlint/config-angular-type-enum": "^14.0.0" }, "engines": { "node": ">=v12" } }, "node_modules/@commitlint/config-angular-type-enum": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@commitlint/config-angular-type-enum/-/config-angular-type-enum-14.0.0.tgz", "integrity": "sha512-c4MX+h4+8TmqELehb6IJfGQ7v/Wp07OfJQpnSnUPksHskjCkojrVnX3JI9Z5BtK7KQHCzJlI6j1CcvehnLSzWw==", "dev": true, "engines": { "node": ">=v12" } }, "node_modules/@commitlint/ensure": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-14.1.0.tgz", "integrity": "sha512-xrYvFdqVepT3XA1BmSh88eKbvYKtLuQu98QLfgxVmwS99Kj3yW0sT3D7jGvNsynbIx2dhbXofDyubf/DKkpFrQ==", "dev": true, "dependencies": { "@commitlint/types": "^14.0.0", "lodash": "^4.17.19" }, "engines": { "node": ">=v12" } }, "node_modules/@commitlint/execute-rule": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-14.0.0.tgz", "integrity": "sha512-Hh/HLpCBDlrD3Rx2x2pDBx6CU+OtVqGXh7mbFpNihAVx6B0zyZqm/vv0cdwdhfGW5OEn1BhCqHf1ZOvL/DwdWA==", "dev": true, "engines": { "node": ">=v12" } }, "node_modules/@commitlint/format": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-14.1.0.tgz", "integrity": "sha512-sF6engqqHjvxGctWRKjFs/HQeNowlpbVmmoP481b2UMQnVQnjjfXJvQsoLpaqFUvgc2sHM4L85F8BmAw+iHG1w==", "dev": true, "dependencies": { "@commitlint/types": "^14.0.0", "chalk": "^4.0.0" }, "engines": { "node": ">=v12" } }, "node_modules/@commitlint/is-ignored": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-14.0.0.tgz", "integrity": "sha512-nJltYjXTa+mk+6SPe35nOZCCvt3Gh5mbDz008KQ4OPcn1GX1NG+pEgz1Kx3agDp/pc+JGnsrr5GV00gygIoloA==", "dev": true, "dependencies": { "@commitlint/types": "^14.0.0", "semver": "7.3.5" }, "engines": { "node": ">=v12" } }, "node_modules/@commitlint/lint": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-14.1.0.tgz", "integrity": "sha512-CApGJEOtWU/CcuPD8HkOR1jdUYpjKutGPaeby9nSFzJhwl/UQOjxc4Nd+2g2ygsMi5l3N4j2sWQYEgccpFC3lA==", "dev": true, "dependencies": { "@commitlint/is-ignored": "^14.0.0", "@commitlint/parse": "^14.0.0", "@commitlint/rules": "^14.1.0", "@commitlint/types": "^14.0.0" }, "engines": { "node": ">=v12" } }, "node_modules/@commitlint/load": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-14.1.0.tgz", "integrity": "sha512-p+HbgjhkqLsnxyjOUdEYHztHCp8n2oLVUJTmRPuP5FXLNevh6Gwmxf+NYC2J0sgD084aV2CFi3qu1W4yHWIknA==", "dev": true, "dependencies": { "@commitlint/execute-rule": "^14.0.0", "@commitlint/resolve-extends": "^14.1.0", "@commitlint/types": "^14.0.0", "@endemolshinegroup/cosmiconfig-typescript-loader": "^3.0.2", "chalk": "^4.0.0", "cosmiconfig": "^7.0.0", "lodash": "^4.17.19", "resolve-from": "^5.0.0", "typescript": "^4.4.3" }, "engines": { "node": ">=v12" } }, "node_modules/@commitlint/message": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-14.0.0.tgz", "integrity": "sha512-316Pum+bwDcZamOQw0DXSY17Dq9EjvL1zKdYIZqneu4lnXN6uFfi53Y/sP5crW6zlLdnuTHe1MnuewXPLHfH1Q==", "dev": true, "engines": { "node": ">=v12" } }, "node_modules/@commitlint/parse": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-14.0.0.tgz", "integrity": "sha512-49qkk0TcwdxJPZUX8MElEzMlRFIL/cg64P4pk8HotFEm2HYdbxxZp6v3cbVw5WOsnRA0frrs+NNoOcIT83ccMQ==", "dev": true, "dependencies": { "@commitlint/types": "^14.0.0", "conventional-changelog-angular": "^5.0.11", "conventional-commits-parser": "^3.2.2" }, "engines": { "node": ">=v12" } }, "node_modules/@commitlint/read": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-14.0.0.tgz", "integrity": "sha512-WXXcSLBqwXTqnEmB0lbU2TrayDJ2G3qI/lxy1ianVmpQol8p9BjodAA6bYxtYYHdQFVXUrIsclzFP/naWG+hlQ==", "dev": true, "dependencies": { "@commitlint/top-level": "^14.0.0", "@commitlint/types": "^14.0.0", "fs-extra": "^10.0.0", "git-raw-commits": "^2.0.0" }, "engines": { "node": ">=v12" } }, "node_modules/@commitlint/resolve-extends": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-14.1.0.tgz", "integrity": "sha512-ko80k6QB6E6/OvGNWy4u7gzzWyluDT3VDNL2kfZaDywsnrYntUKyT4Do97gQ7orttITzj2GRtk3KWClVz4rUUQ==", "dev": true, "dependencies": { "import-fresh": "^3.0.0", "lodash": "^4.17.19", "resolve-from": "^5.0.0", "resolve-global": "^1.0.0" }, "engines": { "node": ">=v12" } }, "node_modules/@commitlint/rules": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-14.1.0.tgz", "integrity": "sha512-6jmv414/1JzGzDI/DS+snAMhcL6roQKPdg0WB3kWTWN52EvWXBFm0HIMGt2H/FlRKxozwVXlQN60/1fNIl98xA==", "dev": true, "dependencies": { "@commitlint/ensure": "^14.1.0", "@commitlint/message": "^14.0.0", "@commitlint/to-lines": "^14.0.0", "@commitlint/types": "^14.0.0", "execa": "^5.0.0" }, "engines": { "node": ">=v12" } }, "node_modules/@commitlint/to-lines": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-14.0.0.tgz", "integrity": "sha512-uIXk54oJDuYyLpI208s3+cGmJ323yvSJ9LB7yUDMWUeJi2LgRxE2EBZL995kLQdnoAsBBXcLq+VDyppg5bV/cg==", "dev": true, "engines": { "node": ">=v12" } }, "node_modules/@commitlint/top-level": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-14.0.0.tgz", "integrity": "sha512-MZDKZfWfl9g4KozgWBGTCrI2cXkMHnBFlhwvEfrAu5G8wd5aL1f2uWEUMnBMjUikmhVj99i1pzge4XFWHQ29wQ==", "dev": true, "dependencies": { "find-up": "^5.0.0" }, "engines": { "node": ">=v12" } }, "node_modules/@commitlint/types": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-14.0.0.tgz", "integrity": "sha512-sIls1nP2uSbGL466edYlh8mn7O/WP4i3bcvP+2DMhkscRCSgaPhNRWDilhYVsHt2Vu1HTQ27uT0Bj5/Lt2+EcQ==", "dev": true, "dependencies": { "chalk": "^4.0.0" }, "engines": { "node": ">=v12" } }, "node_modules/@cspotcode/source-map-consumer": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", "dev": true, "engines": { "node": ">= 12" } }, "node_modules/@cspotcode/source-map-support": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", "dev": true, "dependencies": { "@cspotcode/source-map-consumer": "0.8.0" }, "engines": { "node": ">=12" } }, "node_modules/@endemolshinegroup/cosmiconfig-typescript-loader": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz", "integrity": "sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA==", "dev": true, "dependencies": { "lodash.get": "^4", "make-error": "^1", "ts-node": "^9", "tslib": "^2" }, "engines": { "node": ">=10.0.0" }, "peerDependencies": { "cosmiconfig": ">=6" } }, "node_modules/@endemolshinegroup/cosmiconfig-typescript-loader/node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "engines": { "node": ">=0.3.1" } }, "node_modules/@endemolshinegroup/cosmiconfig-typescript-loader/node_modules/ts-node": { "version": "9.1.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", "dev": true, "dependencies": { "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "source-map-support": "^0.5.17", "yn": "3.1.1" }, "bin": { "ts-node": "dist/bin.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js", "ts-script": "dist/bin-script-deprecated.js" }, "engines": { "node": ">=10.0.0" }, "peerDependencies": { "typescript": ">=2.7" } }, "node_modules/@endemolshinegroup/cosmiconfig-typescript-loader/node_modules/tslib": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", "dev": true }, "node_modules/@eslint/eslintrc": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.4.tgz", "integrity": "sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.0.0", "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc/node_modules/ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true, "engines": { "node": ">= 4" } }, "node_modules/@humanwhocodes/config-array": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.0", "debug": "^4.1.1", "minimatch": "^3.0.4" }, "engines": { "node": ">=10.10.0" } }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, "node_modules/@hutson/parse-repository-url": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" }, "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" }, "engines": { "node": ">= 8" } }, "node_modules/@tsconfig/node10": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", "dev": true }, "node_modules/@tsconfig/node12": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", "dev": true }, "node_modules/@tsconfig/node14": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", "dev": true }, "node_modules/@tsconfig/node16": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", "dev": true }, "node_modules/@tsd/typescript": { "version": "4.4.4", "resolved": "https://registry.npmjs.org/@tsd/typescript/-/typescript-4.4.4.tgz", "integrity": "sha512-XNaotnbhU6sKSXYg9rVz4L9i9g+j+x1IIgMPztK8KumtMEsrLXcqPBKp/qzmUKwAZEqgHs4+TTz90dUu5/aIqQ==", "dev": true, "bin": { "tsc": "typescript/bin/tsc", "tsserver": "typescript/bin/tsserver" } }, "node_modules/@types/chai": { "version": "4.2.22", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.22.tgz", "integrity": "sha512-tFfcE+DSTzWAgifkjik9AySNqIyNoYwmR+uecPwwD/XRNfvOjmC/FjCxpiUGDkDVDphPfCUecSQVFw+lN3M3kQ==", "dev": true }, "node_modules/@types/eslint": { "version": "7.28.2", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.2.tgz", "integrity": "sha512-KubbADPkfoU75KgKeKLsFHXnU4ipH7wYg0TRT33NK3N3yiu7jlFAAoygIWBV+KbuHx/G+AvuGX6DllnK35gfJA==", "dev": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "node_modules/@types/estree": { "version": "0.0.50", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", "dev": true }, "node_modules/@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, "node_modules/@types/minimist": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, "node_modules/@types/mocha": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", "dev": true }, "node_modules/@types/node": { "version": "16.11.6", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==", "dev": true }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, "node_modules/@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.3.0.tgz", "integrity": "sha512-ARUEJHJrq85aaiCqez7SANeahDsJTD3AEua34EoQN9pHS6S5Bq9emcIaGGySt/4X2zSi+vF5hAH52sEen7IO7g==", "dev": true, "dependencies": { "@typescript-eslint/experimental-utils": "5.3.0", "@typescript-eslint/scope-manager": "5.3.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", "regexpp": "^3.2.0", "semver": "^7.3.5", "tsutils": "^3.21.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "@typescript-eslint/parser": "^5.0.0", "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, "node_modules/@typescript-eslint/eslint-plugin-tslint": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin-tslint/-/eslint-plugin-tslint-5.3.0.tgz", "integrity": "sha512-zvK4yBbOTKLD4GCCCzXDqg3DhCoVxoRksCT4Jhv6PJ8l6F9E7lMG4uzrZqFZEOQVtSZaJu7PLEP8Fat0E80nOQ==", "dev": true, "dependencies": { "@typescript-eslint/experimental-utils": "5.3.0", "lodash": "^4.17.21" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0", "tslint": "^5.0.0 || ^6.0.0", "typescript": "*" } }, "node_modules/@typescript-eslint/experimental-utils": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.0.tgz", "integrity": "sha512-NFVxYTjKj69qB0FM+piah1x3G/63WB8vCBMnlnEHUsiLzXSTWb9FmFn36FD9Zb4APKBLY3xRArOGSMQkuzTF1w==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", "@typescript-eslint/scope-manager": "5.3.0", "@typescript-eslint/types": "5.3.0", "@typescript-eslint/typescript-estree": "5.3.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "eslint": "*" } }, "node_modules/@typescript-eslint/parser": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.3.0.tgz", "integrity": "sha512-rKu/yAReip7ovx8UwOAszJVO5MgBquo8WjIQcp1gx4pYQCwYzag+I5nVNHO4MqyMkAo0gWt2gWUi+36gWAVKcw==", "dev": true, "dependencies": { "@typescript-eslint/scope-manager": "5.3.0", "@typescript-eslint/types": "5.3.0", "@typescript-eslint/typescript-estree": "5.3.0", "debug": "^4.3.2" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, "node_modules/@typescript-eslint/scope-manager": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.3.0.tgz", "integrity": "sha512-22Uic9oRlTsPppy5Tcwfj+QET5RWEnZ5414Prby465XxQrQFZ6nnm5KnXgnsAJefG4hEgMnaxTB3kNEyjdjj6A==", "dev": true, "dependencies": { "@typescript-eslint/types": "5.3.0", "@typescript-eslint/visitor-keys": "5.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/types": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.3.0.tgz", "integrity": "sha512-fce5pG41/w8O6ahQEhXmMV+xuh4+GayzqEogN24EK+vECA3I6pUwKuLi5QbXO721EMitpQne5VKXofPonYlAQg==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/typescript-estree": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.0.tgz", "integrity": "sha512-FJ0nqcaUOpn/6Z4Jwbtf+o0valjBLkqc3MWkMvrhA2TvzFXtcclIM8F4MBEmYa2kgcI8EZeSAzwoSrIC8JYkug==", "dev": true, "dependencies": { "@typescript-eslint/types": "5.3.0", "@typescript-eslint/visitor-keys": "5.3.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", "semver": "^7.3.5", "tsutils": "^3.21.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, "node_modules/@typescript-eslint/visitor-keys": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.0.tgz", "integrity": "sha512-oVIAfIQuq0x2TFDNLVavUn548WL+7hdhxYn+9j3YdJJXB7mH9dAmZNJsPDa7Jc+B9WGqoiex7GUDbyMxV0a/aw==", "dev": true, "dependencies": { "@typescript-eslint/types": "5.3.0", "eslint-visitor-keys": "^3.0.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, "node_modules/@xml-conformance-suite/js": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@xml-conformance-suite/js/-/js-3.0.0.tgz", "integrity": "sha512-Keq5JJDcp3zWlxXxRyva1szrny6vyMh1WhgjHTD2bD3J2FGxN9Ao9mkn4GOzT+hox68OmHSeml43jG9dkl21SA==", "dev": true, "dependencies": { "@xml-conformance-suite/test-data": "3.0.0", "argparse": "^2.0.1", "chai": "^4.3.4", "minimist": "^1.2.5", "mocha": "^9.1.3", "saxes": "^5.0.1" } }, "node_modules/@xml-conformance-suite/mocha": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@xml-conformance-suite/mocha/-/mocha-3.0.0.tgz", "integrity": "sha512-9Zkf9AJJBe+zAjf8cAAB9A65XmGVfko9lvNmzUhL2T1ZT7rnxIpT/yjSgxzRRy5iwV3CGMbxA5HOWRh1PM9x5Q==", "dev": true, "dependencies": { "@xml-conformance-suite/js": "3.0.0", "minimist": "^1.2.5" }, "peerDependencies": { "mocha": "6.x || 7.x || 8.x || 9.x" } }, "node_modules/@xml-conformance-suite/test-data": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@xml-conformance-suite/test-data/-/test-data-3.0.0.tgz", "integrity": "sha512-eqoEryycenHAS20NgAnyiUn4w/AsbljN+o536YyXIQbgvsvzjOaI+F2enhIagy8RY/0Qeki+0JSvpGnHTc+EzQ==", "dev": true }, "node_modules/acorn": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", "dev": true, "bin": { "acorn": "bin/acorn" }, "engines": { "node": ">=0.4.0" } }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-walk": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true, "engines": { "node": ">=0.4.0" } }, "node_modules/add-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", "dev": true }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "dependencies": { "type-fest": "^0.21.3" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-escapes/node_modules/type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" }, "engines": { "node": ">= 8" } }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "node_modules/aria-query": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", "dev": true, "dependencies": { "@babel/runtime": "^7.10.2", "@babel/runtime-corejs3": "^7.10.2" }, "engines": { "node": ">=6.0" } }, "node_modules/array-ify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", "dev": true }, "node_modules/array-includes": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.1", "get-intrinsic": "^1.1.1", "is-string": "^1.0.7" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/array.prototype.flat": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array.prototype.flatmap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", "dev": true, "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", "es-abstract": "^1.19.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, "engines": { "node": "*" } }, "node_modules/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=", "dev": true }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, "node_modules/axe-core": { "version": "4.3.5", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/axobject-query": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", "dev": true }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "dependencies": { "fill-range": "^7.0.1" }, "engines": { "node": ">=8" } }, "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "node_modules/builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/camelcase-keys": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "dependencies": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", "quick-lru": "^4.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/chai": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", "deep-eql": "^3.0.1", "get-func-name": "^2.0.0", "pathval": "^1.1.1", "type-detect": "^4.0.5" }, "engines": { "node": ">=4" } }, "node_modules/chalk": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true, "engines": { "node": "*" } }, "node_modules/chokidar": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "dev": true, "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "engines": { "node": ">= 8.10.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "node_modules/chokidar/node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { "is-glob": "^4.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, "node_modules/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==", "dev": true }, "node_modules/compare-func": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, "dependencies": { "array-ify": "^1.0.0", "dot-prop": "^5.1.0" } }, "node_modules/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==", "dev": true }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "node_modules/confusing-browser-globals": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", "dev": true }, "node_modules/conventional-changelog": { "version": "3.1.24", "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.24.tgz", "integrity": "sha512-ed6k8PO00UVvhExYohroVPXcOJ/K1N0/drJHx/faTH37OIZthlecuLIRX/T6uOp682CAoVoFpu+sSEaeuH6Asg==", "dev": true, "dependencies": { "conventional-changelog-angular": "^5.0.12", "conventional-changelog-atom": "^2.0.8", "conventional-changelog-codemirror": "^2.0.8", "conventional-changelog-conventionalcommits": "^4.5.0", "conventional-changelog-core": "^4.2.1", "conventional-changelog-ember": "^2.0.9", "conventional-changelog-eslint": "^3.0.9", "conventional-changelog-express": "^2.0.6", "conventional-changelog-jquery": "^3.0.11", "conventional-changelog-jshint": "^2.0.9", "conventional-changelog-preset-loader": "^2.3.4" }, "engines": { "node": ">=10" } }, "node_modules/conventional-changelog-angular": { "version": "5.0.13", "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", "dev": true, "dependencies": { "compare-func": "^2.0.0", "q": "^1.5.1" }, "engines": { "node": ">=10" } }, "node_modules/conventional-changelog-atom": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz", "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==", "dev": true, "dependencies": { "q": "^1.5.1" }, "engines": { "node": ">=10" } }, "node_modules/conventional-changelog-cli": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-2.1.1.tgz", "integrity": "sha512-xMGQdKJ+4XFDDgfX5aK7UNFduvJMbvF5BB+g0OdVhA3rYdYyhctrIE2Al+WYdZeKTdg9YzMWF2iFPT8MupIwng==", "dev": true, "dependencies": { "add-stream": "^1.0.0", "conventional-changelog": "^3.1.24", "lodash": "^4.17.15", "meow": "^8.0.0", "tempfile": "^3.0.0" }, "bin": { "conventional-changelog": "cli.js" }, "engines": { "node": ">=10" } }, "node_modules/conventional-changelog-codemirror": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz", "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==", "dev": true, "dependencies": { "q": "^1.5.1" }, "engines": { "node": ">=10" } }, "node_modules/conventional-changelog-conventionalcommits": { "version": "4.6.1", "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.1.tgz", "integrity": "sha512-lzWJpPZhbM1R0PIzkwzGBCnAkH5RKJzJfFQZcl/D+2lsJxAwGnDKBqn/F4C1RD31GJNn8NuKWQzAZDAVXPp2Mw==", "dev": true, "dependencies": { "compare-func": "^2.0.0", "lodash": "^4.17.15", "q": "^1.5.1" }, "engines": { "node": ">=10" } }, "node_modules/conventional-changelog-core": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", "dev": true, "dependencies": { "add-stream": "^1.0.0", "conventional-changelog-writer": "^5.0.0", "conventional-commits-parser": "^3.2.0", "dateformat": "^3.0.0", "get-pkg-repo": "^4.0.0", "git-raw-commits": "^2.0.8", "git-remote-origin-url": "^2.0.0", "git-semver-tags": "^4.1.1", "lodash": "^4.17.15", "normalize-package-data": "^3.0.0", "q": "^1.5.1", "read-pkg": "^3.0.0", "read-pkg-up": "^3.0.0", "through2": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/conventional-changelog-ember": { "version": "2.0.9", "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz", "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==", "dev": true, "dependencies": { "q": "^1.5.1" }, "engines": { "node": ">=10" } }, "node_modules/conventional-changelog-eslint": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz", "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==", "dev": true, "dependencies": { "q": "^1.5.1" }, "engines": { "node": ">=10" } }, "node_modules/conventional-changelog-express": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz", "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==", "dev": true, "dependencies": { "q": "^1.5.1" }, "engines": { "node": ">=10" } }, "node_modules/conventional-changelog-jquery": { "version": "3.0.11", "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz", "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==", "dev": true, "dependencies": { "q": "^1.5.1" }, "engines": { "node": ">=10" } }, "node_modules/conventional-changelog-jshint": { "version": "2.0.9", "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz", "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==", "dev": true, "dependencies": { "compare-func": "^2.0.0", "q": "^1.5.1" }, "engines": { "node": ">=10" } }, "node_modules/conventional-changelog-preset-loader": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/conventional-changelog-writer": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.0.tgz", "integrity": "sha512-HnDh9QHLNWfL6E1uHz6krZEQOgm8hN7z/m7tT16xwd802fwgMN0Wqd7AQYVkhpsjDUx/99oo+nGgvKF657XP5g==", "dev": true, "dependencies": { "conventional-commits-filter": "^2.0.7", "dateformat": "^3.0.0", "handlebars": "^4.7.6", "json-stringify-safe": "^5.0.1", "lodash": "^4.17.15", "meow": "^8.0.0", "semver": "^6.0.0", "split": "^1.0.0", "through2": "^4.0.0" }, "bin": { "conventional-changelog-writer": "cli.js" }, "engines": { "node": ">=10" } }, "node_modules/conventional-changelog-writer/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/conventional-commits-filter": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", "dev": true, "dependencies": { "lodash.ismatch": "^4.4.0", "modify-values": "^1.0.0" }, "engines": { "node": ">=10" } }, "node_modules/conventional-commits-parser": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz", "integrity": "sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw==", "dev": true, "dependencies": { "is-text-path": "^1.0.1", "JSONStream": "^1.0.4", "lodash": "^4.17.15", "meow": "^8.0.0", "split2": "^3.0.0", "through2": "^4.0.0" }, "bin": { "conventional-commits-parser": "cli.js" }, "engines": { "node": ">=10" } }, "node_modules/cookiejar": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==", "dev": true }, "node_modules/core-js-pure": { "version": "3.19.1", "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.1.tgz", "integrity": "sha512-Q0Knr8Es84vtv62ei6/6jXH/7izKmOrtrxH9WJTHLCMAVeU+8TF8z8Nr08CsH4Ot0oJKzBzJJL9SJBYIv7WlfQ==", "dev": true, "hasInstallScript": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "node_modules/cosmiconfig": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dev": true, "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", "parse-json": "^5.0.0", "path-type": "^4.0.0", "yaml": "^1.10.0" }, "engines": { "node": ">=10" } }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" }, "engines": { "node": ">= 8" } }, "node_modules/damerau-levenshtein": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz", "integrity": "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==", "dev": true }, "node_modules/dargs": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/dateformat": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true, "engines": { "node": "*" } }, "node_modules/debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/decamelize-keys": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", "dev": true, "dependencies": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "dependencies": { "type-detect": "^4.0.0" }, "engines": { "node": ">=0.12" } }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "node_modules/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==", "dev": true, "dependencies": { "object-keys": "^1.0.12" }, "engines": { "node": ">= 0.4" } }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true, "engines": { "node": ">=0.4.0" } }, "node_modules/diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, "engines": { "node": ">=0.3.1" } }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "dependencies": { "path-type": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { "node": ">=6.0.0" } }, "node_modules/dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "dependencies": { "is-obj": "^2.0.0" }, "engines": { "node": ">=8" } }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, "node_modules/enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "dependencies": { "ansi-colors": "^4.1.1" }, "engines": { "node": ">=8.6" } }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.1", "is-string": "^1.0.7", "is-weakref": "^1.0.1", "object-inspect": "^1.11.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.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.2.0.tgz", "integrity": "sha512-erw7XmM+CLxTOickrimJ1SiF55jiNlVSp2qqm0NuBWPtHYQCegD5ZMaW0c3i5ytPqL+SSLaCxdvQXFPLJn+ABw==", "dev": true, "dependencies": { "@eslint/eslintrc": "^1.0.4", "@humanwhocodes/config-array": "^0.6.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", "eslint-scope": "^6.0.0", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.0.0", "espree": "^9.0.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", "progress": "^2.0.0", "regexpp": "^3.2.0", "semver": "^7.2.1", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-config-airbnb": { "version": "18.2.1", "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-18.2.1.tgz", "integrity": "sha512-glZNDEZ36VdlZWoxn/bUR1r/sdFKPd1mHPbqUtkctgNG4yT2DLLtJ3D+yCV+jzZCc2V1nBVkmdknOJBZ5Hc0fg==", "dev": true, "dependencies": { "eslint-config-airbnb-base": "^14.2.1", "object.assign": "^4.1.2", "object.entries": "^1.1.2" }, "engines": { "node": ">= 6" }, "peerDependencies": { "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-jsx-a11y": "^6.4.1", "eslint-plugin-react": "^7.21.5", "eslint-plugin-react-hooks": "^4 || ^3 || ^2.3.0 || ^1.7.0" } }, "node_modules/eslint-config-airbnb-base": { "version": "14.2.1", "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", "dev": true, "dependencies": { "confusing-browser-globals": "^1.0.10", "object.assign": "^4.1.2", "object.entries": "^1.1.2" }, "engines": { "node": ">= 6" }, "peerDependencies": { "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0", "eslint-plugin-import": "^2.22.1" } }, "node_modules/eslint-config-lddubeau-base": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/eslint-config-lddubeau-base/-/eslint-config-lddubeau-base-6.1.0.tgz", "integrity": "sha512-srIyi1XP/Auy/Fr43zK0r/255aDnwlls3dzYKZqe5WjXruQKYxqYyQoHyyQOPTOA8T1eRfMkrEHP/Ccayk+JqA==", "dev": true, "dependencies": { "eslint-config-airbnb": "^18.2.1" }, "peerDependencies": { "eslint": "^5 || ^6 || ^7.0.0 || ^8.0.0", "eslint-plugin-import": "^2.25.2", "eslint-plugin-jsx-a11y": "^6.4.1", "eslint-plugin-prefer-arrow": "^1.2.3", "eslint-plugin-react": "^7.26.1", "eslint-plugin-simple-import-sort": "^7.0.0" } }, "node_modules/eslint-config-lddubeau-ts": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/eslint-config-lddubeau-ts/-/eslint-config-lddubeau-ts-2.0.2.tgz", "integrity": "sha512-M6xsxo8do85BGGPxtq/5Bp/HDSoeD1C8ByertP4c8Fgtv8AY8HE5IXlTarXHZAwBJc93Q4aHC+u5raAk/TdhQA==", "dev": true, "dependencies": { "eslint-config-lddubeau-base": "^6.0.0" }, "peerDependencies": { "@typescript-eslint/eslint-plugin": "^3.6.0", "@typescript-eslint/eslint-plugin-tslint": "^3.6.0", "@typescript-eslint/parser": "^3.6.0", "eslint": "^7", "eslint-plugin-import": "^2.22.0", "eslint-plugin-jsx-a11y": "^6.3.1", "eslint-plugin-prefer-arrow": "^1.2.2", "eslint-plugin-react": "^7.20.3", "eslint-plugin-simple-import-sort": "^5.0.3", "tslint": "^5.20.1 || 6", "tslint-microsoft-contrib": "^6.2.0" } }, "node_modules/eslint-formatter-pretty": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/eslint-formatter-pretty/-/eslint-formatter-pretty-4.1.0.tgz", "integrity": "sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ==", "dev": true, "dependencies": { "@types/eslint": "^7.2.13", "ansi-escapes": "^4.2.1", "chalk": "^4.1.0", "eslint-rule-docs": "^1.1.5", "log-symbols": "^4.0.0", "plur": "^4.0.0", "string-width": "^4.2.0", "supports-hyperlinks": "^2.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint-import-resolver-node": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", "dev": true, "dependencies": { "debug": "^3.2.7", "resolve": "^1.20.0" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-import-resolver-typescript": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.5.0.tgz", "integrity": "sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==", "dev": true, "dependencies": { "debug": "^4.3.1", "glob": "^7.1.7", "is-glob": "^4.0.1", "resolve": "^1.20.0", "tsconfig-paths": "^3.9.0" }, "engines": { "node": ">=4" }, "peerDependencies": { "eslint": "*", "eslint-plugin-import": "*" } }, "node_modules/eslint-module-utils": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz", "integrity": "sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==", "dev": true, "dependencies": { "debug": "^3.2.7", "find-up": "^2.1.0", "pkg-dir": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-module-utils/node_modules/find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "dependencies": { "locate-path": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/eslint-module-utils/node_modules/locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/eslint-module-utils/node_modules/p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "dependencies": { "p-try": "^1.0.0" }, "engines": { "node": ">=4" } }, "node_modules/eslint-module-utils/node_modules/p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "dependencies": { "p-limit": "^1.1.0" }, "engines": { "node": ">=4" } }, "node_modules/eslint-module-utils/node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/eslint-plugin-import": { "version": "2.25.2", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.2.tgz", "integrity": "sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g==", "dev": true, "dependencies": { "array-includes": "^3.1.4", "array.prototype.flat": "^1.2.5", "debug": "^2.6.9", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.6", "eslint-module-utils": "^2.7.0", "has": "^1.0.3", "is-core-module": "^2.7.0", "is-glob": "^4.0.3", "minimatch": "^3.0.4", "object.values": "^1.1.5", "resolve": "^1.20.0", "tsconfig-paths": "^3.11.0" }, "engines": { "node": ">=4" }, "peerDependencies": { "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { "ms": "2.0.0" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { "node": ">=0.10.0" } }, "node_modules/eslint-plugin-import/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz", "integrity": "sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg==", "dev": true, "dependencies": { "@babel/runtime": "^7.11.2", "aria-query": "^4.2.2", "array-includes": "^3.1.1", "ast-types-flow": "^0.0.7", "axe-core": "^4.0.2", "axobject-query": "^2.2.0", "damerau-levenshtein": "^1.0.6", "emoji-regex": "^9.0.0", "has": "^1.0.3", "jsx-ast-utils": "^3.1.0", "language-tags": "^1.0.5" }, "engines": { "node": ">=4.0" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7" } }, "node_modules/eslint-plugin-prefer-arrow": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz", "integrity": "sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==", "dev": true, "peerDependencies": { "eslint": ">=2.0.0" } }, "node_modules/eslint-plugin-react": { "version": "7.26.1", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.26.1.tgz", "integrity": "sha512-Lug0+NOFXeOE+ORZ5pbsh6mSKjBKXDXItUD2sQoT+5Yl0eoT82DqnXeTMfUare4QVCn9QwXbfzO/dBLjLXwVjQ==", "dev": true, "dependencies": { "array-includes": "^3.1.3", "array.prototype.flatmap": "^1.2.4", "doctrine": "^2.1.0", "estraverse": "^5.2.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.0.4", "object.entries": "^1.1.4", "object.fromentries": "^2.0.4", "object.hasown": "^1.0.0", "object.values": "^1.1.4", "prop-types": "^15.7.2", "resolve": "^2.0.0-next.3", "semver": "^6.3.0", "string.prototype.matchall": "^4.0.5" }, "engines": { "node": ">=4" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7" } }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { "node": ">=0.10.0" } }, "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.3", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", "dev": true, "dependencies": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/eslint-plugin-react/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-plugin-simple-import-sort": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-7.0.0.tgz", "integrity": "sha512-U3vEDB5zhYPNfxT5TYR7u01dboFZp+HNpnGhkDB2g/2E4wZ/g1Q9Ton8UwCLfRV9yAKyYqDh62oHOamvkFxsvw==", "dev": true, "peerDependencies": { "eslint": ">=5.0.0" } }, "node_modules/eslint-rule-docs": { "version": "1.1.231", "resolved": "https://registry.npmjs.org/eslint-rule-docs/-/eslint-rule-docs-1.1.231.tgz", "integrity": "sha512-egHz9A1WG7b8CS0x1P6P/Rj5FqZOjray/VjpJa14tMZalfRKvpE2ONJ3plCM7+PcinmU4tcmbPLv0VtwzSdLVA==", "dev": true }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/eslint-scope/node_modules/estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, "engines": { "node": ">=4.0" } }, "node_modules/eslint-utils": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "dependencies": { "eslint-visitor-keys": "^2.0.0" }, "engines": { "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" }, "funding": { "url": "https://github.com/sponsors/mysticatea" }, "peerDependencies": { "eslint": ">=5" } }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/eslint-visitor-keys": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/eslint/node_modules/eslint-scope": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/eslint/node_modules/ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true, "engines": { "node": ">= 4" } }, "node_modules/espree": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", "dev": true, "dependencies": { "acorn": "^8.5.0", "acorn-jsx": "^5.3.1", "eslint-visitor-keys": "^3.0.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" }, "engines": { "node": ">=4" } }, "node_modules/esquery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "dependencies": { "estraverse": "^5.1.0" }, "engines": { "node": ">=0.10" } }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "dependencies": { "estraverse": "^5.2.0" }, "engines": { "node": ">=4.0" } }, "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { "node": ">=4.0" } }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "node_modules/fast-glob": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" }, "engines": { "node": ">=8" } }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { "is-glob": "^4.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, "node_modules/fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true }, "node_modules/fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, "dependencies": { "reusify": "^1.0.4" } }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "dependencies": { "flat-cache": "^3.0.4" }, "engines": { "node": "^10.12.0 || >=12.0.0" } }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, "bin": { "flat": "cli.js" } }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" }, "engines": { "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", "dev": true }, "node_modules/form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" }, "engines": { "node": ">= 6" } }, "node_modules/formidable": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau", "dev": true, "funding": { "url": "https://ko-fi.com/tunnckoCore/commissions" } }, "node_modules/fs-extra": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { "node": ">=12" } }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, "optional": true, "os": [ "darwin" ], "engines": { "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-func-name": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true, "engines": { "node": "*" } }, "node_modules/get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-pkg-repo": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", "dev": true, "dependencies": { "@hutson/parse-repository-url": "^3.0.0", "hosted-git-info": "^4.0.0", "through2": "^2.0.0", "yargs": "^16.2.0" }, "bin": { "get-pkg-repo": "src/cli.js" }, "engines": { "node": ">=6.9.0" } }, "node_modules/get-pkg-repo/node_modules/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==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "node_modules/get-pkg-repo/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "node_modules/get-pkg-repo/node_modules/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==", "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/get-pkg-repo/node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, "node_modules/get-pkg-repo/node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" }, "engines": { "node": ">=10" } }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/git-raw-commits": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", "dev": true, "dependencies": { "dargs": "^7.0.0", "lodash": "^4.17.15", "meow": "^8.0.0", "split2": "^3.0.0", "through2": "^4.0.0" }, "bin": { "git-raw-commits": "cli.js" }, "engines": { "node": ">=10" } }, "node_modules/git-remote-origin-url": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", "dev": true, "dependencies": { "gitconfiglocal": "^1.0.0", "pify": "^2.3.0" }, "engines": { "node": ">=4" } }, "node_modules/git-semver-tags": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", "dev": true, "dependencies": { "meow": "^8.0.0", "semver": "^6.0.0" }, "bin": { "git-semver-tags": "cli.js" }, "engines": { "node": ">=10" } }, "node_modules/git-semver-tags/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/gitconfiglocal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", "dev": true, "dependencies": { "ini": "^1.3.2" } }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { "is-glob": "^4.0.3" }, "engines": { "node": ">=10.13.0" } }, "node_modules/global-dirs": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", "dev": true, "dependencies": { "ini": "^1.3.4" }, "engines": { "node": ">=4" } }, "node_modules/globals": { "version": "13.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, "dependencies": { "type-fest": "^0.20.2" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globby": { "version": "11.0.4", "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dev": true, "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.1.1", "ignore": "^5.1.4", "merge2": "^1.3.0", "slash": "^3.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/graceful-fs": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, "node_modules/growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true, "engines": { "node": ">=4.x" } }, "node_modules/handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.0", "source-map": "^0.6.1", "wordwrap": "^1.0.0" }, "bin": { "handlebars": "bin/handlebars" }, "engines": { "node": ">=0.4.7" }, "optionalDependencies": { "uglify-js": "^3.1.4" } }, "node_modules/hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "dependencies": { "function-bind": "^1.1.1" }, "engines": { "node": ">= 0.4.0" } }, "node_modules/has-bigints": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/has-symbols": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, "bin": { "he": "bin/he" } }, "node_modules/hosted-git-info": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "engines": { "node": ">=10" } }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "engines": { "node": ">=10.17.0" } }, "node_modules/husky": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", "dev": true, "bin": { "husky": "lib/bin.js" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/typicode" } }, "node_modules/ignore": { "version": "5.1.9", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", "dev": true, "engines": { "node": ">= 4" } }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/import-fresh/node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true, "engines": { "node": ">=0.8.19" } }, "node_modules/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, "node_modules/internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, "dependencies": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, "engines": { "node": ">= 0.4" } }, "node_modules/irregular-plurals": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.3.0.tgz", "integrity": "sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "dependencies": { "has-bigints": "^1.0.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, "engines": { "node": ">=8" } }, "node_modules/is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-core-module": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "dev": true, "dependencies": { "has": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-negative-zero": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/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=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-shared-array-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-symbol": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-text-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", "dev": true, "dependencies": { "text-extensions": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-weakref": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", "dev": true, "dependencies": { "call-bind": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/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==", "dev": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, "node_modules/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=", "dev": true }, "node_modules/json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "node_modules/jsonc-parser": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", "dev": true }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true, "engines": [ "node >= 0.2.0" ] }, "node_modules/JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" }, "bin": { "JSONStream": "bin.js" }, "engines": { "node": "*" } }, "node_modules/jsx-ast-utils": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", "dev": true, "dependencies": { "array-includes": "^3.1.3", "object.assign": "^4.1.2" }, "engines": { "node": ">=4.0" } }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/language-subtag-registry": { "version": "0.3.21", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", "dev": true }, "node_modules/language-tags": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", "dev": true, "dependencies": { "language-subtag-registry": "~0.3.2" } }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/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=", "dev": true }, "node_modules/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=", "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", "pify": "^3.0.0", "strip-bom": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/load-json-file/node_modules/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" }, "engines": { "node": ">=4" } }, "node_modules/load-json-file/node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { "p-locate": "^5.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, "node_modules/lodash.ismatch": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", "dev": true }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/lunr": { "version": "2.3.9", "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", "dev": true }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, "node_modules/map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/marked": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.8.tgz", "integrity": "sha512-0gVrAjo5m0VZSJb4rpL59K1unJAMb/hm8HRXqasD8VeC8m91ytDPMritgFSlKonfdt+rRYYpP/JfLxgIX8yoSw==", "dev": true, "bin": { "marked": "bin/marked" }, "engines": { "node": ">= 12" } }, "node_modules/meow": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "4.1.0", "normalize-package-data": "^3.0.0", "read-pkg-up": "^7.0.1", "redent": "^3.0.0", "trim-newlines": "^3.0.0", "type-fest": "^0.18.0", "yargs-parser": "^20.2.3" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/meow/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/meow/node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "node_modules/meow/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { "p-locate": "^4.1.0" }, "engines": { "node": ">=8" } }, "node_modules/meow/node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { "p-try": "^2.0.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/meow/node_modules/p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { "p-limit": "^2.2.0" }, "engines": { "node": ">=8" } }, "node_modules/meow/node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/meow/node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", "parse-json": "^5.0.0", "type-fest": "^0.6.0" }, "engines": { "node": ">=8" } }, "node_modules/meow/node_modules/read-pkg-up": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", "type-fest": "^0.8.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/meow/node_modules/read-pkg/node_modules/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==", "dev": true, "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/meow/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "bin": { "semver": "bin/semver" } }, "node_modules/meow/node_modules/type-fest": { "version": "0.18.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "engines": { "node": ">= 8" } }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "dependencies": { "braces": "^3.0.1", "picomatch": "^2.2.3" }, "engines": { "node": ">=8.6" } }, "node_modules/mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, "bin": { "mime": "cli.js" }, "engines": { "node": ">=4.0.0" } }, "node_modules/mime-db": { "version": "1.50.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.33", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", "dev": true, "dependencies": { "mime-db": "1.50.0" }, "engines": { "node": ">= 0.6" } }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, "engines": { "node": "*" } }, "node_modules/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "node_modules/minimist-options": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", "kind-of": "^6.0.3" }, "engines": { "node": ">= 6" } }, "node_modules/mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "dependencies": { "minimist": "^1.2.5" }, "bin": { "mkdirp": "bin/cmd.js" } }, "node_modules/mocha": { "version": "9.1.3", "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz", "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==", "dev": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.2", "debug": "4.3.2", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.1.7", "growl": "1.10.5", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "3.0.4", "ms": "2.1.3", "nanoid": "3.1.25", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", "which": "2.0.2", "workerpool": "6.1.5", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, "bin": { "_mocha": "bin/_mocha", "mocha": "bin/mocha" }, "engines": { "node": ">= 12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mochajs" } }, "node_modules/mocha/node_modules/glob": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/mocha/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/mocha/node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" }, "engines": { "node": ">=10" } }, "node_modules/mocha/node_modules/yargs-parser": { "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "node_modules/nanoid": { "version": "3.1.25", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" }, "engines": { "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, "node_modules/normalize-package-data": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" }, "engines": { "node": ">=10" } }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "dependencies": { "path-key": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", "has-symbols": "^1.0.1", "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.entries": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.hasown": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", "dev": true, "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.19.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.values": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "dependencies": { "mimic-fn": "^2.1.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/onigasm": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/onigasm/-/onigasm-2.2.5.tgz", "integrity": "sha512-F+th54mPc0l1lp1ZcFMyL/jTs2Tlq4SqIHKIXGZOR/VkHkF9A7Fr5rRr5+ZG/lWeRsyrClLYRq7s/yFQ/XhWCA==", "dev": true, "dependencies": { "lru-cache": "^5.1.1" } }, "node_modules/onigasm/node_modules/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==", "dev": true, "dependencies": { "yallist": "^3.0.2" } }, "node_modules/onigasm/node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, "node_modules/optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.3" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { "p-limit": "^3.0.2" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "dependencies": { "callsites": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/pathval": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, "engines": { "node": "*" } }, "node_modules/picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true, "engines": { "node": ">=8.6" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "dependencies": { "find-up": "^2.1.0" }, "engines": { "node": ">=4" } }, "node_modules/pkg-dir/node_modules/find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "dependencies": { "locate-path": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/pkg-dir/node_modules/locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/pkg-dir/node_modules/p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "dependencies": { "p-try": "^1.0.0" }, "engines": { "node": ">=4" } }, "node_modules/pkg-dir/node_modules/p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "dependencies": { "p-limit": "^1.1.0" }, "engines": { "node": ">=4" } }, "node_modules/pkg-dir/node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/plur": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz", "integrity": "sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==", "dev": true, "dependencies": { "irregular-plurals": "^3.2.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/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==", "dev": true }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, "engines": { "node": ">=0.4.0" } }, "node_modules/prop-types": { "version": "15.7.2", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", "dev": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.8.1" } }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true, "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" } }, "node_modules/qs": { "version": "6.10.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", "dev": true, "dependencies": { "side-channel": "^1.0.4" }, "engines": { "node": ">=0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ] }, "node_modules/quick-lru": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true }, "node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", "path-type": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/read-pkg-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", "dev": true, "dependencies": { "find-up": "^2.0.0", "read-pkg": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/read-pkg-up/node_modules/find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "dependencies": { "locate-path": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/read-pkg-up/node_modules/locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/read-pkg-up/node_modules/p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "dependencies": { "p-try": "^1.0.0" }, "engines": { "node": ">=4" } }, "node_modules/read-pkg-up/node_modules/p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "dependencies": { "p-limit": "^1.1.0" }, "engines": { "node": ">=4" } }, "node_modules/read-pkg-up/node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/read-pkg/node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "node_modules/read-pkg/node_modules/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==", "dev": true, "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "node_modules/read-pkg/node_modules/path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "dependencies": { "pify": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/read-pkg/node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/read-pkg/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "bin": { "semver": "bin/semver" } }, "node_modules/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==", "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "dependencies": { "picomatch": "^2.2.1" }, "engines": { "node": ">=8.10.0" } }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/regenerator-runtime": { "version": "0.13.9", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true }, "node_modules/regexp.prototype.flags": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/mysticatea" } }, "node_modules/renovate-config-lddubeau": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/renovate-config-lddubeau/-/renovate-config-lddubeau-1.0.0.tgz", "integrity": "sha512-19KCcvxL0TzRMVKVJ1AjP1ToTJ9s3vIjnsC986TvPp0A0MxbC/LZiy+oKMQqUJ0sQHUANQHBhoPqOEJ5tij22g==", "dev": true }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "dependencies": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/resolve-global": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", "dev": true, "dependencies": { "global-dirs": "^0.1.1" }, "engines": { "node": ">=8" } }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ], "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/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==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ] }, "node_modules/saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, "dependencies": { "xmlchars": "^2.2.0" }, "engines": { "node": ">=10" } }, "node_modules/semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/shiki": { "version": "0.9.12", "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.12.tgz", "integrity": "sha512-VXcROdldv0/Qu0w2XvzU4IrvTeBNs/Kj/FCmtcEXGz7Tic/veQzliJj6tEiAgoKianhQstpYmbPDStHU5Opqcw==", "dev": true, "dependencies": { "jsonc-parser": "^3.0.0", "onigasm": "^2.2.5", "vscode-textmate": "5.2.0" } }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/signal-exit": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", "dev": true }, "node_modules/simple-dist-tag": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/simple-dist-tag/-/simple-dist-tag-1.0.2.tgz", "integrity": "sha512-tVhbxlFxzV3re2CaFry5cEJez8a7LTmXyyTQnh6TIzc+uFMUQYir3NqOsSvUoKFdm5j1/SDzo09dmRqEUOyO2w==", "dev": true, "dependencies": { "semver": "^7.1.3", "superagent": "^5.2.2" }, "bin": { "simple-dist-tag": "bin/simple-dist-tag" } }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-support": { "version": "0.5.20", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "node_modules/spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/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==", "dev": true }, "node_modules/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==", "dev": true, "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-license-ids": { "version": "3.0.10", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", "dev": true }, "node_modules/split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, "dependencies": { "through": "2" }, "engines": { "node": "*" } }, "node_modules/split2": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, "dependencies": { "readable-stream": "^3.0.0" } }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, "node_modules/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==", "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, "node_modules/string-width/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "node_modules/string.prototype.matchall": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.1", "get-intrinsic": "^1.1.1", "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", "regexp.prototype.flags": "^1.3.1", "side-channel": "^1.0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimend": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "dependencies": { "min-indent": "^1.0.0" }, "engines": { "node": ">=8" } }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/superagent": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/superagent/-/superagent-5.3.1.tgz", "integrity": "sha512-wjJ/MoTid2/RuGCOFtlacyGNxN9QLMgcpYLDQlWFIhhdJ93kNscFonGvrpAHSCVjRVj++DGCglocF7Aej1KHvQ==", "dev": true, "dependencies": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.2", "debug": "^4.1.1", "fast-safe-stringify": "^2.0.7", "form-data": "^3.0.0", "formidable": "^1.2.2", "methods": "^1.1.2", "mime": "^2.4.6", "qs": "^6.9.4", "readable-stream": "^3.6.0", "semver": "^7.3.2" }, "engines": { "node": ">= 7.0.0" } }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/supports-hyperlinks": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", "dev": true, "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" }, "engines": { "node": ">=8" } }, "node_modules/temp-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/tempfile": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-3.0.0.tgz", "integrity": "sha512-uNFCg478XovRi85iD42egu+eSFUmmka750Jy7L5tfHI5hQKKtbPnxaSaXAbBqCDYrw3wx4tXjKwci4/QmsZJxw==", "dev": true, "dependencies": { "temp-dir": "^2.0.0", "uuid": "^3.3.2" }, "engines": { "node": ">=8" } }, "node_modules/text-extensions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, "engines": { "node": ">=0.10" } }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, "node_modules/through2": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, "dependencies": { "readable-stream": "3" } }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "dependencies": { "is-number": "^7.0.0" }, "engines": { "node": ">=8.0" } }, "node_modules/trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/ts-node": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", "dev": true, "dependencies": { "@cspotcode/source-map-support": "0.7.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", "@tsconfig/node16": "^1.0.2", "acorn": "^8.4.1", "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "yn": "3.1.1" }, "bin": { "ts-node": "dist/bin.js", "ts-node-cwd": "dist/bin-cwd.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js", "ts-script": "dist/bin-script-deprecated.js" }, "peerDependencies": { "@swc/core": ">=1.2.50", "@swc/wasm": ">=1.2.50", "@types/node": "*", "typescript": ">=2.7" }, "peerDependenciesMeta": { "@swc/core": { "optional": true }, "@swc/wasm": { "optional": true } } }, "node_modules/ts-node/node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "engines": { "node": ">=0.3.1" } }, "node_modules/tsconfig-paths": { "version": "3.11.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz", "integrity": "sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==", "dev": true, "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.1", "minimist": "^1.2.0", "strip-bom": "^3.0.0" } }, "node_modules/tsd": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/tsd/-/tsd-0.18.0.tgz", "integrity": "sha512-UIkxm2CLmSjXlQs4zqxgVV9UmzK8VgJ63eBpgkH/ZsMkiUdzxxHvdCCg8F314HDxzfQl2muJEy/TEcXHIFIPXg==", "dev": true, "dependencies": { "@tsd/typescript": "~4.4.3", "eslint-formatter-pretty": "^4.1.0", "globby": "^11.0.1", "meow": "^9.0.0", "path-exists": "^4.0.0", "read-pkg-up": "^7.0.0" }, "bin": { "tsd": "dist/cli.js" }, "engines": { "node": ">=12" } }, "node_modules/tsd/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/tsd/node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "node_modules/tsd/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { "p-locate": "^4.1.0" }, "engines": { "node": ">=8" } }, "node_modules/tsd/node_modules/meow": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", "dev": true, "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", "decamelize": "^1.2.0", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "4.1.0", "normalize-package-data": "^3.0.0", "read-pkg-up": "^7.0.1", "redent": "^3.0.0", "trim-newlines": "^3.0.0", "type-fest": "^0.18.0", "yargs-parser": "^20.2.3" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/tsd/node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { "p-try": "^2.0.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/tsd/node_modules/p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { "p-limit": "^2.2.0" }, "engines": { "node": ">=8" } }, "node_modules/tsd/node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/tsd/node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", "parse-json": "^5.0.0", "type-fest": "^0.6.0" }, "engines": { "node": ">=8" } }, "node_modules/tsd/node_modules/read-pkg-up": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", "type-fest": "^0.8.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/tsd/node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/tsd/node_modules/read-pkg/node_modules/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==", "dev": true, "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "node_modules/tsd/node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/tsd/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "bin": { "semver": "bin/semver" } }, "node_modules/tsd/node_modules/type-fest": { "version": "0.18.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "node_modules/tslint": { "version": "6.1.3", "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", "deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.", "dev": true, "dependencies": { "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", "chalk": "^2.3.0", "commander": "^2.12.1", "diff": "^4.0.1", "glob": "^7.1.1", "js-yaml": "^3.13.1", "minimatch": "^3.0.4", "mkdirp": "^0.5.3", "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.13.0", "tsutils": "^2.29.0" }, "bin": { "tslint": "bin/tslint" }, "engines": { "node": ">=4.8.0" }, "peerDependencies": { "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev" } }, "node_modules/tslint-microsoft-contrib": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/tslint-microsoft-contrib/-/tslint-microsoft-contrib-6.2.0.tgz", "integrity": "sha512-6tfi/2tHqV/3CL77pULBcK+foty11Rr0idRDxKnteTaKm6gWF9qmaCNU17HVssOuwlYNyOmd9Jsmjd+1t3a3qw==", "dev": true, "dependencies": { "tsutils": "^2.27.2 <2.29.0" }, "peerDependencies": { "tslint": "^5.1.0", "typescript": "^2.1.0 || ^3.0.0" } }, "node_modules/tslint-microsoft-contrib/node_modules/tsutils": { "version": "2.28.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.28.0.tgz", "integrity": "sha512-bh5nAtW0tuhvOJnx1GLRn5ScraRLICGyJV5wJhtRWOLsxW70Kk5tZtpK3O/hW6LDnqKS9mlUMPZj9fEMJ0gxqA==", "dev": true, "dependencies": { "tslib": "^1.8.1" }, "peerDependencies": { "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" } }, "node_modules/tslint/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { "color-convert": "^1.9.0" }, "engines": { "node": ">=4" } }, "node_modules/tslint/node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/tslint/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" }, "engines": { "node": ">=4" } }, "node_modules/tslint/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { "color-name": "1.1.3" } }, "node_modules/tslint/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "node_modules/tslint/node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "engines": { "node": ">=0.3.1" } }, "node_modules/tslint/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, "engines": { "node": ">=0.8.0" } }, "node_modules/tslint/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/tslint/node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/tslint/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "bin": { "semver": "bin/semver" } }, "node_modules/tslint/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "dependencies": { "has-flag": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/tslint/node_modules/tsutils": { "version": "2.29.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", "dev": true, "dependencies": { "tslib": "^1.8.1" }, "peerDependencies": { "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" } }, "node_modules/tsutils": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "dependencies": { "tslib": "^1.8.1" }, "engines": { "node": ">= 6" }, "peerDependencies": { "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "dependencies": { "prelude-ls": "^1.2.1" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/typedoc": { "version": "0.22.8", "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.8.tgz", "integrity": "sha512-92S+YzyhospdXN5rnkYUTgirdTYqNWY7NP9vco+IqQQoiSXzVSUsawVro+tMyEEsWUS7EMaJ2YOjB9uE0CBi6A==", "dev": true, "dependencies": { "glob": "^7.2.0", "lunr": "^2.3.9", "marked": "^3.0.8", "minimatch": "^3.0.4", "shiki": "^0.9.12" }, "bin": { "typedoc": "bin/typedoc" }, "engines": { "node": ">= 12.10.0" }, "peerDependencies": { "typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x" } }, "node_modules/typescript": { "version": "4.4.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { "node": ">=4.2.0" } }, "node_modules/uglify-js": { "version": "3.14.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.3.tgz", "integrity": "sha512-mic3aOdiq01DuSVx0TseaEzMIVqebMZ0Z3vaeDhFEh9bsc24hV1TFvN74reA2vs08D0ZWfNjAcJ3UbVLaBss+g==", "dev": true, "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" }, "engines": { "node": ">=0.8.0" } }, "node_modules/unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "has-bigints": "^1.0.1", "has-symbols": "^1.0.2", "which-boxed-primitive": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, "engines": { "node": ">= 10.0.0" } }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "dependencies": { "punycode": "^2.1.0" } }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, "node_modules/uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, "bin": { "uuid": "bin/uuid" } }, "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "node_modules/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==", "dev": true, "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "node_modules/vscode-textmate": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", "dev": true }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" }, "engines": { "node": ">= 8" } }, "node_modules/which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, "node_modules/workerpool": { "version": "6.1.5", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", "dev": true }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, "engines": { "node": ">=0.4" } }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, "engines": { "node": ">= 6" } }, "node_modules/yargs": { "version": "17.2.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz", "integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==", "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" }, "engines": { "node": ">=12" } }, "node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/yargs-unparser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", "flat": "^5.0.2", "is-plain-obj": "^2.1.0" }, "engines": { "node": ">=10" } }, "node_modules/yargs-unparser/node_modules/camelcase": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/yargs-unparser/node_modules/decamelize": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/yargs-unparser/node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } } }, "dependencies": { "@babel/code-frame": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", "dev": true, "requires": { "@babel/highlight": "^7.16.0" } }, "@babel/helper-validator-identifier": { "version": "7.15.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", "dev": true }, "@babel/highlight": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.15.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, "dependencies": { "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" } }, "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "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=", "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" } } } }, "@babel/runtime": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.0.tgz", "integrity": "sha512-Oi2qwQ21X7/d9gn3WiwkDTJmq3TQtYNz89lRnoFy8VeZpWlsyXvzSwiRrRZ8cXluvSwqKxqHJ6dBd9Rv+p0ZGQ==", "dev": true, "requires": { "core-js-pure": "^3.19.0", "regenerator-runtime": "^0.13.4" } }, "@commitlint/cli": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-14.1.0.tgz", "integrity": "sha512-Orq62jkl9qAGvjFqhehtAqjGY/duJ8hIRPPIHmGR2jIB96D4VTmazS3ZvqJz2Q9kKr61mLAk/171zm0FVzQCYA==", "dev": true, "requires": { "@commitlint/format": "^14.1.0", "@commitlint/lint": "^14.1.0", "@commitlint/load": "^14.1.0", "@commitlint/read": "^14.0.0", "@commitlint/types": "^14.0.0", "lodash": "^4.17.19", "resolve-from": "5.0.0", "resolve-global": "1.0.0", "yargs": "^17.0.0" } }, "@commitlint/config-angular": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@commitlint/config-angular/-/config-angular-14.1.0.tgz", "integrity": "sha512-LuI3W0uUR12LAqL9AEtbf+AfvkUzRkzkp/C1//Q7t0nC4+BXrN4MtF0V8B5VHeEqBdVqDzL1w0B1G446OrZmCA==", "dev": true, "requires": { "@commitlint/config-angular-type-enum": "^14.0.0" } }, "@commitlint/config-angular-type-enum": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@commitlint/config-angular-type-enum/-/config-angular-type-enum-14.0.0.tgz", "integrity": "sha512-c4MX+h4+8TmqELehb6IJfGQ7v/Wp07OfJQpnSnUPksHskjCkojrVnX3JI9Z5BtK7KQHCzJlI6j1CcvehnLSzWw==", "dev": true }, "@commitlint/ensure": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-14.1.0.tgz", "integrity": "sha512-xrYvFdqVepT3XA1BmSh88eKbvYKtLuQu98QLfgxVmwS99Kj3yW0sT3D7jGvNsynbIx2dhbXofDyubf/DKkpFrQ==", "dev": true, "requires": { "@commitlint/types": "^14.0.0", "lodash": "^4.17.19" } }, "@commitlint/execute-rule": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-14.0.0.tgz", "integrity": "sha512-Hh/HLpCBDlrD3Rx2x2pDBx6CU+OtVqGXh7mbFpNihAVx6B0zyZqm/vv0cdwdhfGW5OEn1BhCqHf1ZOvL/DwdWA==", "dev": true }, "@commitlint/format": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-14.1.0.tgz", "integrity": "sha512-sF6engqqHjvxGctWRKjFs/HQeNowlpbVmmoP481b2UMQnVQnjjfXJvQsoLpaqFUvgc2sHM4L85F8BmAw+iHG1w==", "dev": true, "requires": { "@commitlint/types": "^14.0.0", "chalk": "^4.0.0" } }, "@commitlint/is-ignored": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-14.0.0.tgz", "integrity": "sha512-nJltYjXTa+mk+6SPe35nOZCCvt3Gh5mbDz008KQ4OPcn1GX1NG+pEgz1Kx3agDp/pc+JGnsrr5GV00gygIoloA==", "dev": true, "requires": { "@commitlint/types": "^14.0.0", "semver": "7.3.5" } }, "@commitlint/lint": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-14.1.0.tgz", "integrity": "sha512-CApGJEOtWU/CcuPD8HkOR1jdUYpjKutGPaeby9nSFzJhwl/UQOjxc4Nd+2g2ygsMi5l3N4j2sWQYEgccpFC3lA==", "dev": true, "requires": { "@commitlint/is-ignored": "^14.0.0", "@commitlint/parse": "^14.0.0", "@commitlint/rules": "^14.1.0", "@commitlint/types": "^14.0.0" } }, "@commitlint/load": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-14.1.0.tgz", "integrity": "sha512-p+HbgjhkqLsnxyjOUdEYHztHCp8n2oLVUJTmRPuP5FXLNevh6Gwmxf+NYC2J0sgD084aV2CFi3qu1W4yHWIknA==", "dev": true, "requires": { "@commitlint/execute-rule": "^14.0.0", "@commitlint/resolve-extends": "^14.1.0", "@commitlint/types": "^14.0.0", "@endemolshinegroup/cosmiconfig-typescript-loader": "^3.0.2", "chalk": "^4.0.0", "cosmiconfig": "^7.0.0", "lodash": "^4.17.19", "resolve-from": "^5.0.0", "typescript": "^4.4.3" } }, "@commitlint/message": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-14.0.0.tgz", "integrity": "sha512-316Pum+bwDcZamOQw0DXSY17Dq9EjvL1zKdYIZqneu4lnXN6uFfi53Y/sP5crW6zlLdnuTHe1MnuewXPLHfH1Q==", "dev": true }, "@commitlint/parse": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-14.0.0.tgz", "integrity": "sha512-49qkk0TcwdxJPZUX8MElEzMlRFIL/cg64P4pk8HotFEm2HYdbxxZp6v3cbVw5WOsnRA0frrs+NNoOcIT83ccMQ==", "dev": true, "requires": { "@commitlint/types": "^14.0.0", "conventional-changelog-angular": "^5.0.11", "conventional-commits-parser": "^3.2.2" } }, "@commitlint/read": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-14.0.0.tgz", "integrity": "sha512-WXXcSLBqwXTqnEmB0lbU2TrayDJ2G3qI/lxy1ianVmpQol8p9BjodAA6bYxtYYHdQFVXUrIsclzFP/naWG+hlQ==", "dev": true, "requires": { "@commitlint/top-level": "^14.0.0", "@commitlint/types": "^14.0.0", "fs-extra": "^10.0.0", "git-raw-commits": "^2.0.0" } }, "@commitlint/resolve-extends": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-14.1.0.tgz", "integrity": "sha512-ko80k6QB6E6/OvGNWy4u7gzzWyluDT3VDNL2kfZaDywsnrYntUKyT4Do97gQ7orttITzj2GRtk3KWClVz4rUUQ==", "dev": true, "requires": { "import-fresh": "^3.0.0", "lodash": "^4.17.19", "resolve-from": "^5.0.0", "resolve-global": "^1.0.0" } }, "@commitlint/rules": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-14.1.0.tgz", "integrity": "sha512-6jmv414/1JzGzDI/DS+snAMhcL6roQKPdg0WB3kWTWN52EvWXBFm0HIMGt2H/FlRKxozwVXlQN60/1fNIl98xA==", "dev": true, "requires": { "@commitlint/ensure": "^14.1.0", "@commitlint/message": "^14.0.0", "@commitlint/to-lines": "^14.0.0", "@commitlint/types": "^14.0.0", "execa": "^5.0.0" } }, "@commitlint/to-lines": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-14.0.0.tgz", "integrity": "sha512-uIXk54oJDuYyLpI208s3+cGmJ323yvSJ9LB7yUDMWUeJi2LgRxE2EBZL995kLQdnoAsBBXcLq+VDyppg5bV/cg==", "dev": true }, "@commitlint/top-level": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-14.0.0.tgz", "integrity": "sha512-MZDKZfWfl9g4KozgWBGTCrI2cXkMHnBFlhwvEfrAu5G8wd5aL1f2uWEUMnBMjUikmhVj99i1pzge4XFWHQ29wQ==", "dev": true, "requires": { "find-up": "^5.0.0" } }, "@commitlint/types": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-14.0.0.tgz", "integrity": "sha512-sIls1nP2uSbGL466edYlh8mn7O/WP4i3bcvP+2DMhkscRCSgaPhNRWDilhYVsHt2Vu1HTQ27uT0Bj5/Lt2+EcQ==", "dev": true, "requires": { "chalk": "^4.0.0" } }, "@cspotcode/source-map-consumer": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", "dev": true }, "@cspotcode/source-map-support": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", "dev": true, "requires": { "@cspotcode/source-map-consumer": "0.8.0" } }, "@endemolshinegroup/cosmiconfig-typescript-loader": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz", "integrity": "sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA==", "dev": true, "requires": { "lodash.get": "^4", "make-error": "^1", "ts-node": "^9", "tslib": "^2" }, "dependencies": { "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, "ts-node": { "version": "9.1.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", "dev": true, "requires": { "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "source-map-support": "^0.5.17", "yn": "3.1.1" } }, "tslib": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", "dev": true } } }, "@eslint/eslintrc": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.4.tgz", "integrity": "sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.0.0", "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, "dependencies": { "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true } } }, "@humanwhocodes/config-array": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.0", "debug": "^4.1.1", "minimatch": "^3.0.4" } }, "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, "@hutson/parse-repository-url": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", "dev": true }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "requires": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true }, "@nodelib/fs.walk": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "requires": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "@tsconfig/node10": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", "dev": true }, "@tsconfig/node12": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", "dev": true }, "@tsconfig/node14": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", "dev": true }, "@tsconfig/node16": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", "dev": true }, "@tsd/typescript": { "version": "4.4.4", "resolved": "https://registry.npmjs.org/@tsd/typescript/-/typescript-4.4.4.tgz", "integrity": "sha512-XNaotnbhU6sKSXYg9rVz4L9i9g+j+x1IIgMPztK8KumtMEsrLXcqPBKp/qzmUKwAZEqgHs4+TTz90dUu5/aIqQ==", "dev": true }, "@types/chai": { "version": "4.2.22", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.22.tgz", "integrity": "sha512-tFfcE+DSTzWAgifkjik9AySNqIyNoYwmR+uecPwwD/XRNfvOjmC/FjCxpiUGDkDVDphPfCUecSQVFw+lN3M3kQ==", "dev": true }, "@types/eslint": { "version": "7.28.2", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.2.tgz", "integrity": "sha512-KubbADPkfoU75KgKeKLsFHXnU4ipH7wYg0TRT33NK3N3yiu7jlFAAoygIWBV+KbuHx/G+AvuGX6DllnK35gfJA==", "dev": true, "requires": { "@types/estree": "*", "@types/json-schema": "*" } }, "@types/estree": { "version": "0.0.50", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", "dev": true }, "@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, "@types/minimist": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, "@types/mocha": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", "dev": true }, "@types/node": { "version": "16.11.6", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==", "dev": true }, "@types/normalize-package-data": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, "@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==", "dev": true }, "@typescript-eslint/eslint-plugin": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.3.0.tgz", "integrity": "sha512-ARUEJHJrq85aaiCqez7SANeahDsJTD3AEua34EoQN9pHS6S5Bq9emcIaGGySt/4X2zSi+vF5hAH52sEen7IO7g==", "dev": true, "requires": { "@typescript-eslint/experimental-utils": "5.3.0", "@typescript-eslint/scope-manager": "5.3.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", "regexpp": "^3.2.0", "semver": "^7.3.5", "tsutils": "^3.21.0" } }, "@typescript-eslint/eslint-plugin-tslint": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin-tslint/-/eslint-plugin-tslint-5.3.0.tgz", "integrity": "sha512-zvK4yBbOTKLD4GCCCzXDqg3DhCoVxoRksCT4Jhv6PJ8l6F9E7lMG4uzrZqFZEOQVtSZaJu7PLEP8Fat0E80nOQ==", "dev": true, "requires": { "@typescript-eslint/experimental-utils": "5.3.0", "lodash": "^4.17.21" } }, "@typescript-eslint/experimental-utils": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.0.tgz", "integrity": "sha512-NFVxYTjKj69qB0FM+piah1x3G/63WB8vCBMnlnEHUsiLzXSTWb9FmFn36FD9Zb4APKBLY3xRArOGSMQkuzTF1w==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", "@typescript-eslint/scope-manager": "5.3.0", "@typescript-eslint/types": "5.3.0", "@typescript-eslint/typescript-estree": "5.3.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/parser": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.3.0.tgz", "integrity": "sha512-rKu/yAReip7ovx8UwOAszJVO5MgBquo8WjIQcp1gx4pYQCwYzag+I5nVNHO4MqyMkAo0gWt2gWUi+36gWAVKcw==", "dev": true, "requires": { "@typescript-eslint/scope-manager": "5.3.0", "@typescript-eslint/types": "5.3.0", "@typescript-eslint/typescript-estree": "5.3.0", "debug": "^4.3.2" } }, "@typescript-eslint/scope-manager": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.3.0.tgz", "integrity": "sha512-22Uic9oRlTsPppy5Tcwfj+QET5RWEnZ5414Prby465XxQrQFZ6nnm5KnXgnsAJefG4hEgMnaxTB3kNEyjdjj6A==", "dev": true, "requires": { "@typescript-eslint/types": "5.3.0", "@typescript-eslint/visitor-keys": "5.3.0" } }, "@typescript-eslint/types": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.3.0.tgz", "integrity": "sha512-fce5pG41/w8O6ahQEhXmMV+xuh4+GayzqEogN24EK+vECA3I6pUwKuLi5QbXO721EMitpQne5VKXofPonYlAQg==", "dev": true }, "@typescript-eslint/typescript-estree": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.0.tgz", "integrity": "sha512-FJ0nqcaUOpn/6Z4Jwbtf+o0valjBLkqc3MWkMvrhA2TvzFXtcclIM8F4MBEmYa2kgcI8EZeSAzwoSrIC8JYkug==", "dev": true, "requires": { "@typescript-eslint/types": "5.3.0", "@typescript-eslint/visitor-keys": "5.3.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", "semver": "^7.3.5", "tsutils": "^3.21.0" } }, "@typescript-eslint/visitor-keys": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.0.tgz", "integrity": "sha512-oVIAfIQuq0x2TFDNLVavUn548WL+7hdhxYn+9j3YdJJXB7mH9dAmZNJsPDa7Jc+B9WGqoiex7GUDbyMxV0a/aw==", "dev": true, "requires": { "@typescript-eslint/types": "5.3.0", "eslint-visitor-keys": "^3.0.0" } }, "@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, "@xml-conformance-suite/js": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@xml-conformance-suite/js/-/js-3.0.0.tgz", "integrity": "sha512-Keq5JJDcp3zWlxXxRyva1szrny6vyMh1WhgjHTD2bD3J2FGxN9Ao9mkn4GOzT+hox68OmHSeml43jG9dkl21SA==", "dev": true, "requires": { "@xml-conformance-suite/test-data": "3.0.0", "argparse": "^2.0.1", "chai": "^4.3.4", "minimist": "^1.2.5", "mocha": "^9.1.3", "saxes": "^5.0.1" } }, "@xml-conformance-suite/mocha": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@xml-conformance-suite/mocha/-/mocha-3.0.0.tgz", "integrity": "sha512-9Zkf9AJJBe+zAjf8cAAB9A65XmGVfko9lvNmzUhL2T1ZT7rnxIpT/yjSgxzRRy5iwV3CGMbxA5HOWRh1PM9x5Q==", "dev": true, "requires": { "@xml-conformance-suite/js": "3.0.0", "minimist": "^1.2.5" } }, "@xml-conformance-suite/test-data": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@xml-conformance-suite/test-data/-/test-data-3.0.0.tgz", "integrity": "sha512-eqoEryycenHAS20NgAnyiUn4w/AsbljN+o536YyXIQbgvsvzjOaI+F2enhIagy8RY/0Qeki+0JSvpGnHTc+EzQ==", "dev": true }, "acorn": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", "dev": true }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true }, "acorn-walk": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true }, "add-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", "dev": true }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "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" } }, "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "requires": { "type-fest": "^0.21.3" }, "dependencies": { "type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true } } }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "aria-query": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", "dev": true, "requires": { "@babel/runtime": "^7.10.2", "@babel/runtime-corejs3": "^7.10.2" } }, "array-ify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", "dev": true }, "array-includes": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.1", "get-intrinsic": "^1.1.1", "is-string": "^1.0.7" } }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, "array.prototype.flat": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.0" } }, "array.prototype.flatmap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", "dev": true, "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", "es-abstract": "^1.19.0" } }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, "assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, "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=", "dev": true }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, "axe-core": { "version": "4.3.5", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==", "dev": true }, "axobject-query": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", "dev": true }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { "fill-range": "^7.0.1" } }, "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" } }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "camelcase-keys": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "requires": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", "quick-lru": "^4.0.1" } }, "chai": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", "dev": true, "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", "deep-eql": "^3.0.1", "get-func-name": "^2.0.0", "pathval": "^1.1.1", "type-detect": "^4.0.5" } }, "chalk": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true }, "chokidar": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "dev": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", "fsevents": "~2.3.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "dependencies": { "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" } } } }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "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==", "dev": true }, "compare-func": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, "requires": { "array-ify": "^1.0.0", "dot-prop": "^5.1.0" } }, "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==", "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "confusing-browser-globals": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", "dev": true }, "conventional-changelog": { "version": "3.1.24", "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.24.tgz", "integrity": "sha512-ed6k8PO00UVvhExYohroVPXcOJ/K1N0/drJHx/faTH37OIZthlecuLIRX/T6uOp682CAoVoFpu+sSEaeuH6Asg==", "dev": true, "requires": { "conventional-changelog-angular": "^5.0.12", "conventional-changelog-atom": "^2.0.8", "conventional-changelog-codemirror": "^2.0.8", "conventional-changelog-conventionalcommits": "^4.5.0", "conventional-changelog-core": "^4.2.1", "conventional-changelog-ember": "^2.0.9", "conventional-changelog-eslint": "^3.0.9", "conventional-changelog-express": "^2.0.6", "conventional-changelog-jquery": "^3.0.11", "conventional-changelog-jshint": "^2.0.9", "conventional-changelog-preset-loader": "^2.3.4" } }, "conventional-changelog-angular": { "version": "5.0.13", "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", "dev": true, "requires": { "compare-func": "^2.0.0", "q": "^1.5.1" } }, "conventional-changelog-atom": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz", "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==", "dev": true, "requires": { "q": "^1.5.1" } }, "conventional-changelog-cli": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-2.1.1.tgz", "integrity": "sha512-xMGQdKJ+4XFDDgfX5aK7UNFduvJMbvF5BB+g0OdVhA3rYdYyhctrIE2Al+WYdZeKTdg9YzMWF2iFPT8MupIwng==", "dev": true, "requires": { "add-stream": "^1.0.0", "conventional-changelog": "^3.1.24", "lodash": "^4.17.15", "meow": "^8.0.0", "tempfile": "^3.0.0" } }, "conventional-changelog-codemirror": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz", "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==", "dev": true, "requires": { "q": "^1.5.1" } }, "conventional-changelog-conventionalcommits": { "version": "4.6.1", "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.1.tgz", "integrity": "sha512-lzWJpPZhbM1R0PIzkwzGBCnAkH5RKJzJfFQZcl/D+2lsJxAwGnDKBqn/F4C1RD31GJNn8NuKWQzAZDAVXPp2Mw==", "dev": true, "requires": { "compare-func": "^2.0.0", "lodash": "^4.17.15", "q": "^1.5.1" } }, "conventional-changelog-core": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", "dev": true, "requires": { "add-stream": "^1.0.0", "conventional-changelog-writer": "^5.0.0", "conventional-commits-parser": "^3.2.0", "dateformat": "^3.0.0", "get-pkg-repo": "^4.0.0", "git-raw-commits": "^2.0.8", "git-remote-origin-url": "^2.0.0", "git-semver-tags": "^4.1.1", "lodash": "^4.17.15", "normalize-package-data": "^3.0.0", "q": "^1.5.1", "read-pkg": "^3.0.0", "read-pkg-up": "^3.0.0", "through2": "^4.0.0" } }, "conventional-changelog-ember": { "version": "2.0.9", "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz", "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==", "dev": true, "requires": { "q": "^1.5.1" } }, "conventional-changelog-eslint": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz", "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==", "dev": true, "requires": { "q": "^1.5.1" } }, "conventional-changelog-express": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz", "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==", "dev": true, "requires": { "q": "^1.5.1" } }, "conventional-changelog-jquery": { "version": "3.0.11", "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz", "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==", "dev": true, "requires": { "q": "^1.5.1" } }, "conventional-changelog-jshint": { "version": "2.0.9", "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz", "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==", "dev": true, "requires": { "compare-func": "^2.0.0", "q": "^1.5.1" } }, "conventional-changelog-preset-loader": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", "dev": true }, "conventional-changelog-writer": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.0.tgz", "integrity": "sha512-HnDh9QHLNWfL6E1uHz6krZEQOgm8hN7z/m7tT16xwd802fwgMN0Wqd7AQYVkhpsjDUx/99oo+nGgvKF657XP5g==", "dev": true, "requires": { "conventional-commits-filter": "^2.0.7", "dateformat": "^3.0.0", "handlebars": "^4.7.6", "json-stringify-safe": "^5.0.1", "lodash": "^4.17.15", "meow": "^8.0.0", "semver": "^6.0.0", "split": "^1.0.0", "through2": "^4.0.0" }, "dependencies": { "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "conventional-commits-filter": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", "dev": true, "requires": { "lodash.ismatch": "^4.4.0", "modify-values": "^1.0.0" } }, "conventional-commits-parser": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz", "integrity": "sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw==", "dev": true, "requires": { "is-text-path": "^1.0.1", "JSONStream": "^1.0.4", "lodash": "^4.17.15", "meow": "^8.0.0", "split2": "^3.0.0", "through2": "^4.0.0" } }, "cookiejar": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==", "dev": true }, "core-js-pure": { "version": "3.19.1", "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.1.tgz", "integrity": "sha512-Q0Knr8Es84vtv62ei6/6jXH/7izKmOrtrxH9WJTHLCMAVeU+8TF8z8Nr08CsH4Ot0oJKzBzJJL9SJBYIv7WlfQ==", "dev": true }, "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "cosmiconfig": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dev": true, "requires": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", "parse-json": "^5.0.0", "path-type": "^4.0.0", "yaml": "^1.10.0" } }, "create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "damerau-levenshtein": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz", "integrity": "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==", "dev": true }, "dargs": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true }, "dateformat": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true }, "debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" } }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, "decamelize-keys": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", "dev": true, "requires": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" }, "dependencies": { "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true } } }, "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { "type-detect": "^4.0.0" } }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "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==", "dev": true, "requires": { "object-keys": "^1.0.12" } }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "requires": { "path-type": "^4.0.0" } }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { "esutils": "^2.0.2" } }, "dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "requires": { "is-obj": "^2.0.0" } }, "emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, "enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "requires": { "ansi-colors": "^4.1.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==", "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, "es-abstract": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.1", "is-string": "^1.0.7", "is-weakref": "^1.0.1", "object-inspect": "^1.11.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.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==", "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "eslint": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.2.0.tgz", "integrity": "sha512-erw7XmM+CLxTOickrimJ1SiF55jiNlVSp2qqm0NuBWPtHYQCegD5ZMaW0c3i5ytPqL+SSLaCxdvQXFPLJn+ABw==", "dev": true, "requires": { "@eslint/eslintrc": "^1.0.4", "@humanwhocodes/config-array": "^0.6.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", "eslint-scope": "^6.0.0", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.0.0", "espree": "^9.0.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", "progress": "^2.0.0", "regexpp": "^3.2.0", "semver": "^7.2.1", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { "eslint-scope": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true } } }, "eslint-config-airbnb": { "version": "18.2.1", "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-18.2.1.tgz", "integrity": "sha512-glZNDEZ36VdlZWoxn/bUR1r/sdFKPd1mHPbqUtkctgNG4yT2DLLtJ3D+yCV+jzZCc2V1nBVkmdknOJBZ5Hc0fg==", "dev": true, "requires": { "eslint-config-airbnb-base": "^14.2.1", "object.assign": "^4.1.2", "object.entries": "^1.1.2" } }, "eslint-config-airbnb-base": { "version": "14.2.1", "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", "dev": true, "requires": { "confusing-browser-globals": "^1.0.10", "object.assign": "^4.1.2", "object.entries": "^1.1.2" } }, "eslint-config-lddubeau-base": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/eslint-config-lddubeau-base/-/eslint-config-lddubeau-base-6.1.0.tgz", "integrity": "sha512-srIyi1XP/Auy/Fr43zK0r/255aDnwlls3dzYKZqe5WjXruQKYxqYyQoHyyQOPTOA8T1eRfMkrEHP/Ccayk+JqA==", "dev": true, "requires": { "eslint-config-airbnb": "^18.2.1" } }, "eslint-config-lddubeau-ts": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/eslint-config-lddubeau-ts/-/eslint-config-lddubeau-ts-2.0.2.tgz", "integrity": "sha512-M6xsxo8do85BGGPxtq/5Bp/HDSoeD1C8ByertP4c8Fgtv8AY8HE5IXlTarXHZAwBJc93Q4aHC+u5raAk/TdhQA==", "dev": true, "requires": { "eslint-config-lddubeau-base": "^6.0.0" } }, "eslint-formatter-pretty": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/eslint-formatter-pretty/-/eslint-formatter-pretty-4.1.0.tgz", "integrity": "sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ==", "dev": true, "requires": { "@types/eslint": "^7.2.13", "ansi-escapes": "^4.2.1", "chalk": "^4.1.0", "eslint-rule-docs": "^1.1.5", "log-symbols": "^4.0.0", "plur": "^4.0.0", "string-width": "^4.2.0", "supports-hyperlinks": "^2.0.0" } }, "eslint-import-resolver-node": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", "dev": true, "requires": { "debug": "^3.2.7", "resolve": "^1.20.0" }, "dependencies": { "debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" } } } }, "eslint-import-resolver-typescript": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.5.0.tgz", "integrity": "sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==", "dev": true, "requires": { "debug": "^4.3.1", "glob": "^7.1.7", "is-glob": "^4.0.1", "resolve": "^1.20.0", "tsconfig-paths": "^3.9.0" } }, "eslint-module-utils": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz", "integrity": "sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==", "dev": true, "requires": { "debug": "^3.2.7", "find-up": "^2.1.0", "pkg-dir": "^2.0.0" }, "dependencies": { "debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" } }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { "locate-path": "^2.0.0" } }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" } }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { "p-try": "^1.0.0" } }, "p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { "p-limit": "^1.1.0" } }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true } } }, "eslint-plugin-import": { "version": "2.25.2", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.2.tgz", "integrity": "sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g==", "dev": true, "requires": { "array-includes": "^3.1.4", "array.prototype.flat": "^1.2.5", "debug": "^2.6.9", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.6", "eslint-module-utils": "^2.7.0", "has": "^1.0.3", "is-core-module": "^2.7.0", "is-glob": "^4.0.3", "minimatch": "^3.0.4", "object.values": "^1.1.5", "resolve": "^1.20.0", "tsconfig-paths": "^3.11.0" }, "dependencies": { "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" } }, "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { "esutils": "^2.0.2" } }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, "eslint-plugin-jsx-a11y": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz", "integrity": "sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg==", "dev": true, "requires": { "@babel/runtime": "^7.11.2", "aria-query": "^4.2.2", "array-includes": "^3.1.1", "ast-types-flow": "^0.0.7", "axe-core": "^4.0.2", "axobject-query": "^2.2.0", "damerau-levenshtein": "^1.0.6", "emoji-regex": "^9.0.0", "has": "^1.0.3", "jsx-ast-utils": "^3.1.0", "language-tags": "^1.0.5" } }, "eslint-plugin-prefer-arrow": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz", "integrity": "sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==", "dev": true }, "eslint-plugin-react": { "version": "7.26.1", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.26.1.tgz", "integrity": "sha512-Lug0+NOFXeOE+ORZ5pbsh6mSKjBKXDXItUD2sQoT+5Yl0eoT82DqnXeTMfUare4QVCn9QwXbfzO/dBLjLXwVjQ==", "dev": true, "requires": { "array-includes": "^3.1.3", "array.prototype.flatmap": "^1.2.4", "doctrine": "^2.1.0", "estraverse": "^5.2.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.0.4", "object.entries": "^1.1.4", "object.fromentries": "^2.0.4", "object.hasown": "^1.0.0", "object.values": "^1.1.4", "prop-types": "^15.7.2", "resolve": "^2.0.0-next.3", "semver": "^6.3.0", "string.prototype.matchall": "^4.0.5" }, "dependencies": { "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { "esutils": "^2.0.2" } }, "resolve": { "version": "2.0.0-next.3", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", "dev": true, "requires": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "eslint-plugin-simple-import-sort": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-7.0.0.tgz", "integrity": "sha512-U3vEDB5zhYPNfxT5TYR7u01dboFZp+HNpnGhkDB2g/2E4wZ/g1Q9Ton8UwCLfRV9yAKyYqDh62oHOamvkFxsvw==", "dev": true }, "eslint-rule-docs": { "version": "1.1.231", "resolved": "https://registry.npmjs.org/eslint-rule-docs/-/eslint-rule-docs-1.1.231.tgz", "integrity": "sha512-egHz9A1WG7b8CS0x1P6P/Rj5FqZOjray/VjpJa14tMZalfRKvpE2ONJ3plCM7+PcinmU4tcmbPLv0VtwzSdLVA==", "dev": true }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" }, "dependencies": { "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true } } }, "eslint-utils": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { "eslint-visitor-keys": "^2.0.0" }, "dependencies": { "eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true } } }, "eslint-visitor-keys": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", "dev": true }, "espree": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", "dev": true, "requires": { "acorn": "^8.5.0", "acorn-jsx": "^5.3.1", "eslint-visitor-keys": "^3.0.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==", "dev": true }, "esquery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { "estraverse": "^5.1.0" } }, "esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { "estraverse": "^5.2.0" } }, "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-glob": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" }, "dependencies": { "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" } } } }, "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==", "dev": true }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, "fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true }, "fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, "requires": { "reusify": "^1.0.4" } }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { "flat-cache": "^3.0.4" } }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { "to-regex-range": "^5.0.1" } }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { "flatted": "^3.1.0", "rimraf": "^3.0.2" } }, "flatted": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", "dev": true }, "form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, "formidable": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", "dev": true }, "fs-extra": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dev": true, "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "optional": true }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "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=", "dev": true }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "get-func-name": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true }, "get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1" } }, "get-pkg-repo": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", "dev": true, "requires": { "@hutson/parse-repository-url": "^3.0.0", "hosted-git-info": "^4.0.0", "through2": "^2.0.0", "yargs": "^16.2.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==", "dev": 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" } }, "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==", "dev": true }, "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==", "dev": true, "requires": { "safe-buffer": "~5.1.0" } }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } } } }, "get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, "get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" } }, "git-raw-commits": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", "dev": true, "requires": { "dargs": "^7.0.0", "lodash": "^4.17.15", "meow": "^8.0.0", "split2": "^3.0.0", "through2": "^4.0.0" } }, "git-remote-origin-url": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", "dev": true, "requires": { "gitconfiglocal": "^1.0.0", "pify": "^2.3.0" } }, "git-semver-tags": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", "dev": true, "requires": { "meow": "^8.0.0", "semver": "^6.0.0" }, "dependencies": { "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "gitconfiglocal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", "dev": true, "requires": { "ini": "^1.3.2" } }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { "is-glob": "^4.0.3" } }, "global-dirs": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", "dev": true, "requires": { "ini": "^1.3.4" } }, "globals": { "version": "13.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, "globby": { "version": "11.0.4", "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dev": true, "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.1.1", "ignore": "^5.1.4", "merge2": "^1.3.0", "slash": "^3.0.0" } }, "graceful-fs": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, "growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, "handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, "requires": { "minimist": "^1.2.5", "neo-async": "^2.6.0", "source-map": "^0.6.1", "uglify-js": "^3.1.4", "wordwrap": "^1.0.0" } }, "hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { "function-bind": "^1.1.1" } }, "has-bigints": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "has-symbols": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, "has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "requires": { "has-symbols": "^1.0.2" } }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, "hosted-git-info": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", "dev": true, "requires": { "lru-cache": "^6.0.0" } }, "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, "husky": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", "dev": true }, "ignore": { "version": "5.1.9", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", "dev": true }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" }, "dependencies": { "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true } } }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" } }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, "internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, "requires": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", "side-channel": "^1.0.4" } }, "irregular-plurals": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.3.0.tgz", "integrity": "sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g==", "dev": true }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, "is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "requires": { "has-bigints": "^1.0.1" } }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { "binary-extensions": "^2.0.0" } }, "is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, "is-core-module": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "dev": true, "requires": { "has": "^1.0.3" } }, "is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" } }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" } }, "is-negative-zero": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", "dev": true }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, "is-number-object": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" } }, "is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true }, "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=", "dev": true }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "is-shared-array-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", "dev": true }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, "is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" } }, "is-symbol": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { "has-symbols": "^1.0.2" } }, "is-text-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", "dev": true, "requires": { "text-extensions": "^1.0.0" } }, "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, "is-weakref": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", "dev": true, "requires": { "call-bind": "^1.0.0" } }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { "argparse": "^2.0.1" } }, "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==", "dev": true }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, "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==", "dev": true }, "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=", "dev": true }, "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=", "dev": true }, "json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { "minimist": "^1.2.0" } }, "jsonc-parser": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", "dev": true }, "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { "graceful-fs": "^4.1.6", "universalify": "^2.0.0" } }, "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, "JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "requires": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" } }, "jsx-ast-utils": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", "dev": true, "requires": { "array-includes": "^3.1.3", "object.assign": "^4.1.2" } }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, "language-subtag-registry": { "version": "0.3.21", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", "dev": true }, "language-tags": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", "dev": true, "requires": { "language-subtag-registry": "~0.3.2" } }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "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=", "dev": true }, "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=", "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", "pify": "^3.0.0", "strip-bom": "^3.0.0" }, "dependencies": { "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true } } }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { "p-locate": "^5.0.0" } }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, "lodash.ismatch": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", "dev": true }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" } }, "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==", "dev": true, "requires": { "js-tokens": "^3.0.0 || ^4.0.0" } }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { "yallist": "^4.0.0" } }, "lunr": { "version": "2.3.9", "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", "dev": true }, "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, "map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true }, "marked": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.8.tgz", "integrity": "sha512-0gVrAjo5m0VZSJb4rpL59K1unJAMb/hm8HRXqasD8VeC8m91ytDPMritgFSlKonfdt+rRYYpP/JfLxgIX8yoSw==", "dev": true }, "meow": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "requires": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "4.1.0", "normalize-package-data": "^3.0.0", "read-pkg-up": "^7.0.1", "redent": "^3.0.0", "trim-newlines": "^3.0.0", "type-fest": "^0.18.0", "yargs-parser": "^20.2.3" }, "dependencies": { "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { "p-locate": "^4.1.0" } }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" } }, "p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { "p-limit": "^2.2.0" } }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "requires": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", "parse-json": "^5.0.0", "type-fest": "^0.6.0" }, "dependencies": { "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==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "type-fest": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true } } }, "read-pkg-up": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "requires": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", "type-fest": "^0.8.1" }, "dependencies": { "type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true } } }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "type-fest": { "version": "0.18.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true } } }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", "dev": true }, "micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { "braces": "^3.0.1", "picomatch": "^2.2.3" } }, "mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true }, "mime-db": { "version": "1.50.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", "dev": true }, "mime-types": { "version": "2.1.33", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", "dev": true, "requires": { "mime-db": "1.50.0" } }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "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==", "dev": true }, "minimist-options": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "requires": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", "kind-of": "^6.0.3" } }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { "minimist": "^1.2.5" } }, "mocha": { "version": "9.1.3", "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz", "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.2", "debug": "4.3.2", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.1.7", "growl": "1.10.5", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "3.0.4", "ms": "2.1.3", "nanoid": "3.1.25", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", "which": "2.0.2", "workerpool": "6.1.5", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, "dependencies": { "glob": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" } }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } }, "yargs-parser": { "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true } } }, "modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "nanoid": { "version": "3.1.25", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", "dev": true }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, "normalize-package-data": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "requires": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { "path-key": "^3.0.0" } }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, "object-inspect": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", "dev": true }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", "has-symbols": "^1.0.1", "object-keys": "^1.1.1" } }, "object.entries": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.1" } }, "object.fromentries": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.1" } }, "object.hasown": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.19.1" } }, "object.values": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.1" } }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { "wrappy": "1" } }, "onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { "mimic-fn": "^2.1.0" } }, "onigasm": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/onigasm/-/onigasm-2.2.5.tgz", "integrity": "sha512-F+th54mPc0l1lp1ZcFMyL/jTs2Tlq4SqIHKIXGZOR/VkHkF9A7Fr5rRr5+ZG/lWeRsyrClLYRq7s/yFQ/XhWCA==", "dev": true, "requires": { "lru-cache": "^5.1.1" }, "dependencies": { "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==", "dev": true, "requires": { "yallist": "^3.0.2" } }, "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true } } }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "requires": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.3" } }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { "yocto-queue": "^0.1.0" } }, "p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { "p-limit": "^3.0.2" } }, "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { "callsites": "^3.0.0" } }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, "pathval": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { "find-up": "^2.1.0" }, "dependencies": { "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { "locate-path": "^2.0.0" } }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" } }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { "p-try": "^1.0.0" } }, "p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { "p-limit": "^1.1.0" } }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true } } }, "plur": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz", "integrity": "sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==", "dev": true, "requires": { "irregular-plurals": "^3.2.0" } }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "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==", "dev": true }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, "prop-types": { "version": "15.7.2", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", "dev": true, "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.8.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==", "dev": true }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true }, "qs": { "version": "6.10.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", "dev": true, "requires": { "side-channel": "^1.0.4" } }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, "quick-lru": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { "safe-buffer": "^5.1.0" } }, "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", "path-type": "^3.0.0" }, "dependencies": { "hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "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==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { "pify": "^3.0.0" } }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "read-pkg-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", "dev": true, "requires": { "find-up": "^2.0.0", "read-pkg": "^3.0.0" }, "dependencies": { "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { "locate-path": "^2.0.0" } }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" } }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { "p-try": "^1.0.0" } }, "p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { "p-limit": "^1.1.0" } }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true } } }, "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==", "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { "picomatch": "^2.2.1" } }, "redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "requires": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" } }, "regenerator-runtime": { "version": "0.13.9", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true }, "regexp.prototype.flags": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "renovate-config-lddubeau": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/renovate-config-lddubeau/-/renovate-config-lddubeau-1.0.0.tgz", "integrity": "sha512-19KCcvxL0TzRMVKVJ1AjP1ToTJ9s3vIjnsC986TvPp0A0MxbC/LZiy+oKMQqUJ0sQHUANQHBhoPqOEJ5tij22g==", "dev": true }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, "resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, "resolve-global": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", "dev": true, "requires": { "global-dirs": "^0.1.1" } }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" } }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "requires": { "queue-microtask": "^1.2.2" } }, "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==", "dev": true }, "saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, "requires": { "xmlchars": "^2.2.0" } }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" } }, "serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { "randombytes": "^2.1.0" } }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { "shebang-regex": "^3.0.0" } }, "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, "shiki": { "version": "0.9.12", "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.12.tgz", "integrity": "sha512-VXcROdldv0/Qu0w2XvzU4IrvTeBNs/Kj/FCmtcEXGz7Tic/veQzliJj6tEiAgoKianhQstpYmbPDStHU5Opqcw==", "dev": true, "requires": { "jsonc-parser": "^3.0.0", "onigasm": "^2.2.5", "vscode-textmate": "5.2.0" } }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" } }, "signal-exit": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", "dev": true }, "simple-dist-tag": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/simple-dist-tag/-/simple-dist-tag-1.0.2.tgz", "integrity": "sha512-tVhbxlFxzV3re2CaFry5cEJez8a7LTmXyyTQnh6TIzc+uFMUQYir3NqOsSvUoKFdm5j1/SDzo09dmRqEUOyO2w==", "dev": true, "requires": { "semver": "^7.1.3", "superagent": "^5.2.2" } }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "source-map-support": { "version": "0.5.20", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "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==", "dev": true }, "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==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { "version": "3.0.10", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", "dev": true }, "split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, "requires": { "through": "2" } }, "split2": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, "requires": { "readable-stream": "^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=", "dev": true }, "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==", "dev": true, "requires": { "safe-buffer": "~5.2.0" } }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" }, "dependencies": { "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true } } }, "string.prototype.matchall": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.1", "get-intrinsic": "^1.1.1", "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", "regexp.prototype.flags": "^1.3.1", "side-channel": "^1.0.4" } }, "string.prototype.trimend": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, "string.prototype.trimstart": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { "ansi-regex": "^5.0.1" } }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, "strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "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==", "dev": true }, "superagent": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/superagent/-/superagent-5.3.1.tgz", "integrity": "sha512-wjJ/MoTid2/RuGCOFtlacyGNxN9QLMgcpYLDQlWFIhhdJ93kNscFonGvrpAHSCVjRVj++DGCglocF7Aej1KHvQ==", "dev": true, "requires": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.2", "debug": "^4.1.1", "fast-safe-stringify": "^2.0.7", "form-data": "^3.0.0", "formidable": "^1.2.2", "methods": "^1.1.2", "mime": "^2.4.6", "qs": "^6.9.4", "readable-stream": "^3.6.0", "semver": "^7.3.2" } }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" } }, "supports-hyperlinks": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", "dev": true, "requires": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" } }, "temp-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", "dev": true }, "tempfile": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-3.0.0.tgz", "integrity": "sha512-uNFCg478XovRi85iD42egu+eSFUmmka750Jy7L5tfHI5hQKKtbPnxaSaXAbBqCDYrw3wx4tXjKwci4/QmsZJxw==", "dev": true, "requires": { "temp-dir": "^2.0.0", "uuid": "^3.3.2" } }, "text-extensions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, "through2": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, "requires": { "readable-stream": "3" } }, "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==", "dev": true, "requires": { "is-number": "^7.0.0" } }, "trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true }, "ts-node": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", "dev": true, "requires": { "@cspotcode/source-map-support": "0.7.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", "@tsconfig/node16": "^1.0.2", "acorn": "^8.4.1", "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "yn": "3.1.1" }, "dependencies": { "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true } } }, "tsconfig-paths": { "version": "3.11.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz", "integrity": "sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==", "dev": true, "requires": { "@types/json5": "^0.0.29", "json5": "^1.0.1", "minimist": "^1.2.0", "strip-bom": "^3.0.0" } }, "tsd": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/tsd/-/tsd-0.18.0.tgz", "integrity": "sha512-UIkxm2CLmSjXlQs4zqxgVV9UmzK8VgJ63eBpgkH/ZsMkiUdzxxHvdCCg8F314HDxzfQl2muJEy/TEcXHIFIPXg==", "dev": true, "requires": { "@tsd/typescript": "~4.4.3", "eslint-formatter-pretty": "^4.1.0", "globby": "^11.0.1", "meow": "^9.0.0", "path-exists": "^4.0.0", "read-pkg-up": "^7.0.0" }, "dependencies": { "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { "p-locate": "^4.1.0" } }, "meow": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", "dev": true, "requires": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", "decamelize": "^1.2.0", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "4.1.0", "normalize-package-data": "^3.0.0", "read-pkg-up": "^7.0.1", "redent": "^3.0.0", "trim-newlines": "^3.0.0", "type-fest": "^0.18.0", "yargs-parser": "^20.2.3" } }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" } }, "p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { "p-limit": "^2.2.0" } }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "requires": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", "parse-json": "^5.0.0", "type-fest": "^0.6.0" }, "dependencies": { "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==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "type-fest": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true } } }, "read-pkg-up": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "requires": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", "type-fest": "^0.8.1" }, "dependencies": { "type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true } } }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "type-fest": { "version": "0.18.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true } } }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "tslint": { "version": "6.1.3", "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", "chalk": "^2.3.0", "commander": "^2.12.1", "diff": "^4.0.1", "glob": "^7.1.1", "js-yaml": "^3.13.1", "minimatch": "^3.0.4", "mkdirp": "^0.5.3", "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.13.0", "tsutils": "^2.29.0" }, "dependencies": { "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "~1.0.2" } }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" } }, "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, "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=", "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" } }, "tsutils": { "version": "2.29.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", "dev": true, "requires": { "tslib": "^1.8.1" } } } }, "tslint-microsoft-contrib": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/tslint-microsoft-contrib/-/tslint-microsoft-contrib-6.2.0.tgz", "integrity": "sha512-6tfi/2tHqV/3CL77pULBcK+foty11Rr0idRDxKnteTaKm6gWF9qmaCNU17HVssOuwlYNyOmd9Jsmjd+1t3a3qw==", "dev": true, "requires": { "tsutils": "^2.27.2 <2.29.0" }, "dependencies": { "tsutils": { "version": "2.28.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.28.0.tgz", "integrity": "sha512-bh5nAtW0tuhvOJnx1GLRn5ScraRLICGyJV5wJhtRWOLsxW70Kk5tZtpK3O/hW6LDnqKS9mlUMPZj9fEMJ0gxqA==", "dev": true, "requires": { "tslib": "^1.8.1" } } } }, "tsutils": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { "tslib": "^1.8.1" } }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { "prelude-ls": "^1.2.1" } }, "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, "typedoc": { "version": "0.22.8", "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.8.tgz", "integrity": "sha512-92S+YzyhospdXN5rnkYUTgirdTYqNWY7NP9vco+IqQQoiSXzVSUsawVro+tMyEEsWUS7EMaJ2YOjB9uE0CBi6A==", "dev": true, "requires": { "glob": "^7.2.0", "lunr": "^2.3.9", "marked": "^3.0.8", "minimatch": "^3.0.4", "shiki": "^0.9.12" } }, "typescript": { "version": "4.4.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", "dev": true }, "uglify-js": { "version": "3.14.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.3.tgz", "integrity": "sha512-mic3aOdiq01DuSVx0TseaEzMIVqebMZ0Z3vaeDhFEh9bsc24hV1TFvN74reA2vs08D0ZWfNjAcJ3UbVLaBss+g==", "dev": true, "optional": true }, "unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", "dev": true, "requires": { "function-bind": "^1.1.1", "has-bigints": "^1.0.1", "has-symbols": "^1.0.2", "which-boxed-primitive": "^1.0.2" } }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" } }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true }, "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "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==", "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "vscode-textmate": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", "dev": true }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" } }, "which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "requires": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" } }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, "workerpool": { "version": "6.1.5", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", "dev": true }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true }, "yargs": { "version": "17.2.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz", "integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==", "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } }, "yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true }, "yargs-unparser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "requires": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", "flat": "^5.0.2", "is-plain-obj": "^2.1.0" }, "dependencies": { "camelcase": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true }, "decamelize": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true }, "is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true } } }, "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true } } } saxes-6.0.0/package.json000066400000000000000000000054601414202165000151260ustar00rootroot00000000000000{ "name": "saxes", "private": true, "description": "An evented streaming XML parser in JavaScript", "author": "Louis-Dominique Dubeau ", "version": "6.0.0", "main": "saxes.js", "types": "saxes.d.ts", "license": "ISC", "engines": { "node": ">=v12.22.7" }, "scripts": { "tsc": "tsc", "copy": "cp -p README.md build/dist && sed -e'/\"private\": true/d' package.json > build/dist/package.json", "build": "npm run tsc && npm run copy", "test": "npm run build && mocha --delay", "lint": "eslint --ignore-path .gitignore '**/*.ts' '**/*.js'", "lint-fix": "npm run lint -- --fix", "posttest": "npm run lint", "typedoc": "typedoc --tsconfig tsconfig.json --name saxes --out build/docs/ --listInvalidSymbolLinks --excludePrivate --excludeNotExported", "build-docs": "npm run typedoc", "gh-pages": "npm run build-docs && mkdir -p build && (cd build; rm -rf gh-pages; git clone .. --branch gh-pages gh-pages) && mkdir -p build/gh-pages/latest && find build/gh-pages/latest -type f -delete && cp -rp build/docs/* build/gh-pages/latest && find build/gh-pages -type d -empty -delete", "self:publish": "cd build/dist && npm_config_tag=`simple-dist-tag` npm publish", "version": "conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md", "postversion": "npm run test && npm run self:publish", "postpublish": "git push origin --follow-tags" }, "repository": "https://github.com/lddubeau/saxes.git", "devDependencies": { "@commitlint/cli": "^14.1.0", "@commitlint/config-angular": "^14.1.0", "@types/chai": "^4.2.22", "@types/mocha": "^9.0.0", "@types/node": "^16.11.6", "@typescript-eslint/eslint-plugin": "^5.3.0", "@typescript-eslint/eslint-plugin-tslint": "^5.3.0", "@typescript-eslint/parser": "^5.3.0", "@xml-conformance-suite/js": "^3.0.0", "@xml-conformance-suite/mocha": "^3.0.0", "@xml-conformance-suite/test-data": "^3.0.0", "chai": "^4.3.4", "conventional-changelog-cli": "^2.1.1", "eslint": "^8.2.0", "eslint-config-lddubeau-base": "^6.1.0", "eslint-config-lddubeau-ts": "^2.0.2", "eslint-import-resolver-typescript": "^2.5.0", "eslint-plugin-import": "^2.25.2", "eslint-plugin-jsx-a11y": "^6.4.1", "eslint-plugin-prefer-arrow": "^1.2.3", "eslint-plugin-react": "^7.26.1", "eslint-plugin-simple-import-sort": "^7.0.0", "husky": "^7.0.4", "mocha": "^9.1.3", "renovate-config-lddubeau": "^1.0.0", "simple-dist-tag": "^1.0.2", "ts-node": "^10.4.0", "tsd": "^0.18.0", "tslint": "^6.1.3", "tslint-microsoft-contrib": "^6.2.0", "typedoc": "^0.22.8", "typescript": "^4.4.4" }, "dependencies": { "xmlchars": "^2.2.0" }, "husky": { "hooks": { "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" } } } saxes-6.0.0/src/000077500000000000000000000000001414202165000134225ustar00rootroot00000000000000saxes-6.0.0/src/saxes.ts000066400000000000000000002274621414202165000151320ustar00rootroot00000000000000import * as ed5 from "xmlchars/xml/1.0/ed5"; import * as ed2 from "xmlchars/xml/1.1/ed2"; import * as NSed3 from "xmlchars/xmlns/1.0/ed3"; import isS = ed5.isS; import isChar10 = ed5.isChar; import isNameStartChar = ed5.isNameStartChar; import isNameChar = ed5.isNameChar; import S_LIST = ed5.S_LIST; import NAME_RE = ed5.NAME_RE; import isChar11 = ed2.isChar; import isNCNameStartChar = NSed3.isNCNameStartChar; import isNCNameChar = NSed3.isNCNameChar; import NC_NAME_RE = NSed3.NC_NAME_RE; const XML_NAMESPACE = "http://www.w3.org/XML/1998/namespace"; const XMLNS_NAMESPACE = "http://www.w3.org/2000/xmlns/"; const rootNS: Record = { // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment __proto__: null as any, xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE, }; const XML_ENTITIES: Record = { // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment __proto__: null as any, amp: "&", gt: ">", lt: "<", quot: "\"", apos: "'", }; // EOC: end-of-chunk const EOC = -1; const NL_LIKE = -2; const S_BEGIN = 0; // Initial state. const S_BEGIN_WHITESPACE = 1; // leading whitespace const S_DOCTYPE = 2; // const TAB = 9; const NL = 0xA; const CR = 0xD; const SPACE = 0x20; const BANG = 0x21; const DQUOTE = 0x22; const AMP = 0x26; const SQUOTE = 0x27; const MINUS = 0x2D; const FORWARD_SLASH = 0x2F; const SEMICOLON = 0x3B; const LESS = 0x3C; const EQUAL = 0x3D; const GREATER = 0x3E; const QUESTION = 0x3F; const OPEN_BRACKET = 0x5B; const CLOSE_BRACKET = 0x5D; const NEL = 0x85; const LS = 0x2028; // Line Separator const isQuote = (c: number): boolean => c === DQUOTE || c === SQUOTE; const QUOTES = [DQUOTE, SQUOTE]; const DOCTYPE_TERMINATOR = [...QUOTES, OPEN_BRACKET, GREATER]; const DTD_TERMINATOR = [...QUOTES, LESS, CLOSE_BRACKET]; const XML_DECL_NAME_TERMINATOR = [EQUAL, QUESTION, ...S_LIST]; const ATTRIB_VALUE_UNQUOTED_TERMINATOR = [...S_LIST, GREATER, AMP, LESS]; function nsPairCheck(parser: SaxesParser, prefix: string, uri: string): void { switch (prefix) { case "xml": if (uri !== XML_NAMESPACE) { parser.fail(`xml prefix must be bound to ${XML_NAMESPACE}.`); } break; case "xmlns": if (uri !== XMLNS_NAMESPACE) { parser.fail(`xmlns prefix must be bound to ${XMLNS_NAMESPACE}.`); } break; default: } switch (uri) { case XMLNS_NAMESPACE: parser.fail(prefix === "" ? `the default namespace may not be set to ${uri}.` : `may not assign a prefix (even "xmlns") to the URI \ ${XMLNS_NAMESPACE}.`); break; case XML_NAMESPACE: switch (prefix) { case "xml": // Assinging the XML namespace to "xml" is fine. break; case "": parser.fail(`the default namespace may not be set to ${uri}.`); break; default: parser.fail("may not assign the xml namespace to another prefix."); } break; default: } } function nsMappingCheck(parser: SaxesParser, mapping: Record): void { for (const local of Object.keys(mapping)) { nsPairCheck(parser, local, mapping[local]); } } const isNCName = (name: string): boolean => NC_NAME_RE.test(name); const isName = (name: string): boolean => NAME_RE.test(name); const FORBIDDEN_START = 0; const FORBIDDEN_BRACKET = 1; const FORBIDDEN_BRACKET_BRACKET = 2; /** * The list of supported events. */ export const EVENTS = [ "xmldecl", "text", "processinginstruction", "doctype", "comment", "opentagstart", "attribute", "opentag", "closetag", "cdata", "error", "end", "ready", ] as const; const EVENT_NAME_TO_HANDLER_NAME: Record = { xmldecl: "xmldeclHandler", text: "textHandler", processinginstruction: "piHandler", doctype: "doctypeHandler", comment: "commentHandler", opentagstart: "openTagStartHandler", attribute: "attributeHandler", opentag: "openTagHandler", closetag: "closeTagHandler", cdata: "cdataHandler", error: "errorHandler", end: "endHandler", ready: "readyHandler", }; /** * Event handler for the * * @param text The text data encountered by the parser. * */ export type XMLDeclHandler = (decl: XMLDecl) => void; /** * Event handler for text data. * * @param text The text data encountered by the parser. * */ export type TextHandler = (text: string) => void; /** * Event handler for processing instructions. * * @param data The target and body of the processing instruction. */ export type PIHandler = (data: { target: string; body: string }) => void; /** * Event handler for doctype. * * @param doctype The doctype contents. */ export type DoctypeHandler = (doctype: string) => void; /** * Event handler for comments. * * @param comment The comment contents. */ export type CommentHandler = (comment: string) => void; /** * Event handler for the start of an open tag. This is called as soon as we * have a tag name. * * @param tag The tag. */ export type OpenTagStartHandler = (tag: StartTagForOptions) => void; export type AttributeEventForOptions = O extends { xmlns: true } ? SaxesAttributeNSIncomplete : O extends { xmlns?: false | undefined } ? SaxesAttributePlain : SaxesAttribute; /** * Event handler for attributes. */ export type AttributeHandler = (attribute: AttributeEventForOptions) => void; /** * Event handler for an open tag. This is called when the open tag is * complete. (We've encountered the ">" that ends the open tag.) * * @param tag The tag. */ export type OpenTagHandler = (tag: TagForOptions) => void; /** * Event handler for a close tag. Note that for self-closing tags, this is * called right after ``opentag``. * * @param tag The tag. */ export type CloseTagHandler = (tag: TagForOptions) => void; /** * Event handler for a CDATA section. This is called when ending the * CDATA section. * * @param cdata The contents of the CDATA section. */ export type CDataHandler = (cdata: string) => void; /** * Event handler for the stream end. This is called when the stream has been * closed with ``close`` or by passing ``null`` to ``write``. */ export type EndHandler = () => void; /** * Event handler indicating parser readiness . This is called when the parser * is ready to parse a new document. */ export type ReadyHandler = () => void; /** * Event handler indicating an error. * * @param err The error that occurred. */ export type ErrorHandler = (err: Error) => void; export type EventName = (typeof EVENTS)[number]; export type EventNameToHandler = { "xmldecl": XMLDeclHandler; "text": TextHandler; "processinginstruction": PIHandler; "doctype": DoctypeHandler; "comment": CommentHandler; "opentagstart": OpenTagStartHandler; "attribute": AttributeHandler; "opentag": OpenTagHandler; "closetag": CloseTagHandler; "cdata": CDataHandler; "error": ErrorHandler; "end": EndHandler; "ready": ReadyHandler; }[N]; /** * This interface defines the structure of attributes when the parser is * processing namespaces (created with ``xmlns: true``). */ export interface SaxesAttributeNS { /** * The attribute's name. This is the combination of prefix and local name. * For instance ``a:b="c"`` would have ``a:b`` for name. */ name: string; /** * The attribute's prefix. For instance ``a:b="c"`` would have ``"a"`` for * ``prefix``. */ prefix: string; /** * The attribute's local name. For instance ``a:b="c"`` would have ``"b"`` for * ``local``. */ local: string; /** The namespace URI of this attribute. */ uri: string; /** The attribute's value. */ value: string; } /** * This is an attribute, as recorded by a parser which parses namespaces but * prior to the URI being resolvable. This is what is passed to the attribute * event handler. */ export type SaxesAttributeNSIncomplete = Exclude; /** * This interface defines the structure of attributes when the parser is * NOT processing namespaces (created with ``xmlns: false``). */ export interface SaxesAttributePlain { /** * The attribute's name. */ name: string; /** The attribute's value. */ value: string; } /** * A saxes attribute, with or without namespace information. */ export type SaxesAttribute = SaxesAttributeNS | SaxesAttributePlain; /** * This are the fields that MAY be present on a complete tag. */ export interface SaxesTag { /** * The tag's name. This is the combination of prefix and global name. For * instance ```` would have ``"a:b"`` for ``name``. */ name: string; /** * A map of attribute name to attributes. If namespaces are tracked, the * values in the map are attribute objects. Otherwise, they are strings. */ attributes: Record | Record; /** * The namespace bindings in effect. */ ns?: Record; /** * The tag's prefix. For instance ```` would have ``"a"`` for * ``prefix``. Undefined if we do not track namespaces. */ prefix?: string; /** * The tag's local name. For instance ```` would * have ``"b"`` for ``local``. Undefined if we do not track namespaces. */ local?: string; /** * The namespace URI of this tag. Undefined if we do not track namespaces. */ uri?: string; /** Whether the tag is self-closing (e.g. ````). */ isSelfClosing: boolean; } /** * This type defines the fields that are present on a tag object when * ``onopentagstart`` is called. This interface is namespace-agnostic. */ export type SaxesStartTag = Pick; /** * This type defines the fields that are present on a tag object when * ``onopentagstart`` is called on a parser that does not processes namespaces. */ export type SaxesStartTagPlain = Pick; /** * This type defines the fields that are present on a tag object when * ``onopentagstart`` is called on a parser that does process namespaces. */ export type SaxesStartTagNS = Required; /** * This are the fields that are present on a complete tag produced by a parser * that does process namespaces. */ export type SaxesTagNS = Required & { attributes: Record; }; /** * This are the fields that are present on a complete tag produced by a parser * that does not process namespaces. */ export type SaxesTagPlain = Pick & { attributes: Record; }; // This is an internal type used for holding tags while they are being built. type SaxesTagIncomplete = Omit & Partial>; /** * An XML declaration. */ export interface XMLDecl { /** The version specified by the XML declaration. */ version?: string; /** The encoding specified by the XML declaration. */ encoding?: string; /** The value of the standalone parameter */ standalone?: string; } /** * A callback for resolving name prefixes. * * @param prefix The prefix to check. * * @returns The URI corresponding to the prefix, if any. */ export type ResolvePrefix = (prefix: string) => string | undefined; export interface CommonOptions { /** Whether to accept XML fragments. Unset means ``false``. */ fragment?: boolean; /** Whether to track positions. Unset means ``true``. */ position?: boolean; /** * A file name to use for error reporting. "File name" is a loose concept. You * could use a URL to some resource, or any descriptive name you like. */ fileName?: string; } export interface NSOptions { /** Whether to track namespaces. Unset means ``false``. */ xmlns?: boolean; /** * A plain object whose key, value pairs define namespaces known before * parsing the XML file. It is not legal to pass bindings for the namespaces * ``"xml"`` or ``"xmlns"``. */ additionalNamespaces?: Record; /** * A function that will be used if the parser cannot resolve a namespace * prefix on its own. */ resolvePrefix?: ResolvePrefix; } export interface NSOptionsWithoutNamespaces extends NSOptions { xmlns?: false; // It makes no sense to set these if namespaces are not used. additionalNamespaces?: undefined; resolvePrefix?: undefined; } export interface NSOptionsWithNamespaces extends NSOptions { xmlns: true; // The other options are still optional. } export interface XMLVersionOptions { /** * The default XML version to use. If unspecified, and there is no XML * encoding declaration, the default version is "1.0". */ defaultXMLVersion?: "1.0" | "1.1"; /** * A flag indicating whether to force the XML version used for parsing to the * value of ``defaultXMLVersion``. When this flag is ``true``, * ``defaultXMLVersion`` must be specified. If unspecified, the default value * of this flag is ``false``. */ forceXMLVersion?: boolean; } export interface NoForcedXMLVersion extends XMLVersionOptions { forceXMLVersion?: false; // defaultXMLVersion stays the same. } export interface ForcedXMLVersion extends XMLVersionOptions { forceXMLVersion: true; // defaultXMLVersion becomes mandatory. defaultXMLVersion: Exclude; } /** * The entire set of options supported by saxes. */ export type SaxesOptions = CommonOptions & NSOptions & XMLVersionOptions; export type TagForOptions = O extends { xmlns: true } ? SaxesTagNS : O extends { xmlns?: false | undefined } ? SaxesTagPlain : SaxesTag; export type StartTagForOptions = O extends { xmlns: true } ? SaxesStartTagNS : O extends { xmlns?: false | undefined } ? SaxesStartTagPlain : SaxesStartTag; // eslint-disable-next-line @typescript-eslint/ban-types export class SaxesParser { private readonly fragmentOpt: boolean; private readonly xmlnsOpt: boolean; private readonly trackPosition: boolean; private readonly fileName?: string; private readonly nameStartCheck: (c: number) => boolean; private readonly nameCheck: (c: number) => boolean; private readonly isName: (name: string) => boolean; private readonly ns!: Record; private openWakaBang!: string; private text!: string; private name!: string; private piTarget!: string; private entity!: string; private q!: null | number; private tags!: SaxesTagIncomplete[]; private tag!: SaxesTagIncomplete | null; private topNS!: Record | null; private chunk!: string; private chunkPosition!: number; private i!: number; // // We use prevI to allow "ungetting" the previously read code point. Note // however, that it is not safe to unget everything and anything. In // particular ungetting EOL characters will screw positioning up. // // Practically, you must not unget a code which has any side effect beyond // updating ``this.i`` and ``this.prevI``. Only EOL codes have such side // effects. // private prevI!: number; private carriedFromPrevious?: string; private forbiddenState!: number; private attribList!: (SaxesAttributeNSIncomplete | SaxesAttributePlain)[]; private state!: number; private reportedTextBeforeRoot!: boolean; private reportedTextAfterRoot!: boolean; private closedRoot!: boolean; private sawRoot!: boolean; private xmlDeclPossible!: boolean; private xmlDeclExpects!: string[]; private entityReturnState?: number; private processAttribs!: (this: this) => void; private positionAtNewLine!: number; private doctype!: boolean; private getCode!: () => number; private isChar!: (c: number) => boolean; private pushAttrib!: (name: string, value: string) => void; private _closed!: boolean; private currentXMLVersion!: string; private readonly stateTable: ((this: SaxesParser) => void)[]; private xmldeclHandler?: XMLDeclHandler; private textHandler?: TextHandler; private piHandler?: PIHandler; private doctypeHandler?: DoctypeHandler; private commentHandler?: CommentHandler; private openTagStartHandler?: OpenTagStartHandler; private openTagHandler?: OpenTagHandler; private closeTagHandler?: CloseTagHandler; private cdataHandler?: CDataHandler; private errorHandler?: ErrorHandler; private endHandler?: EndHandler; private readyHandler?: ReadyHandler; private attributeHandler?: AttributeHandler; /** * Indicates whether or not the parser is closed. If ``true``, wait for * the ``ready`` event to write again. */ get closed(): boolean { return this._closed; } readonly opt: SaxesOptions; /** * The XML declaration for this document. */ xmlDecl!: XMLDecl; /** * The line number of the next character to be read by the parser. This field * is one-based. (The first line is numbered 1.) */ line!: number; /** * The column number of the next character to be read by the parser. * * This field is zero-based. (The first column is 0.) * * This field counts columns by *Unicode character*. Note that this *can* * be different from the index of the character in a JavaScript string due * to how JavaScript handles astral plane characters. * * See [[columnIndex]] for a number that corresponds to the JavaScript index. */ column!: number; /** * A map of entity name to expansion. */ ENTITIES!: Record; /** * @param opt The parser options. */ constructor(opt?: O) { this.opt = opt ?? {}; this.fragmentOpt = !!(this.opt.fragment as boolean); const xmlnsOpt = this.xmlnsOpt = !!(this.opt.xmlns as boolean); this.trackPosition = this.opt.position !== false; this.fileName = this.opt.fileName; if (xmlnsOpt) { // This is the function we use to perform name checks on PIs and entities. // When namespaces are used, colons are not allowed in PI target names or // entity names. So the check depends on whether namespaces are used. See: // // https://www.w3.org/XML/xml-names-19990114-errata.html // NE08 // this.nameStartCheck = isNCNameStartChar; this.nameCheck = isNCNameChar; this.isName = isNCName; // eslint-disable-next-line @typescript-eslint/unbound-method this.processAttribs = this.processAttribsNS; // eslint-disable-next-line @typescript-eslint/unbound-method this.pushAttrib = this.pushAttribNS; // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment this.ns = { __proto__: null as any, ...rootNS }; const additional = this.opt.additionalNamespaces; if (additional != null) { nsMappingCheck(this, additional); Object.assign(this.ns, additional); } } else { this.nameStartCheck = isNameStartChar; this.nameCheck = isNameChar; this.isName = isName; // eslint-disable-next-line @typescript-eslint/unbound-method this.processAttribs = this.processAttribsPlain; // eslint-disable-next-line @typescript-eslint/unbound-method this.pushAttrib = this.pushAttribPlain; } // // The order of the members in this table needs to correspond to the state // numbers given to the states that correspond to the methods being recorded // here. // this.stateTable = [ /* eslint-disable @typescript-eslint/unbound-method */ this.sBegin, this.sBeginWhitespace, this.sDoctype, this.sDoctypeQuote, this.sDTD, this.sDTDQuoted, this.sDTDOpenWaka, this.sDTDOpenWakaBang, this.sDTDComment, this.sDTDCommentEnding, this.sDTDCommentEnded, this.sDTDPI, this.sDTDPIEnding, this.sText, this.sEntity, this.sOpenWaka, this.sOpenWakaBang, this.sComment, this.sCommentEnding, this.sCommentEnded, this.sCData, this.sCDataEnding, this.sCDataEnding2, this.sPIFirstChar, this.sPIRest, this.sPIBody, this.sPIEnding, this.sXMLDeclNameStart, this.sXMLDeclName, this.sXMLDeclEq, this.sXMLDeclValueStart, this.sXMLDeclValue, this.sXMLDeclSeparator, this.sXMLDeclEnding, this.sOpenTag, this.sOpenTagSlash, this.sAttrib, this.sAttribName, this.sAttribNameSawWhite, this.sAttribValue, this.sAttribValueQuoted, this.sAttribValueClosed, this.sAttribValueUnquoted, this.sCloseTag, this.sCloseTagSawWhite, /* eslint-enable @typescript-eslint/unbound-method */ ]; this._init(); } _init(): void { this.openWakaBang = ""; this.text = ""; this.name = ""; this.piTarget = ""; this.entity = ""; this.q = null; this.tags = []; this.tag = null; this.topNS = null; this.chunk = ""; this.chunkPosition = 0; this.i = 0; this.prevI = 0; this.carriedFromPrevious = undefined; this.forbiddenState = FORBIDDEN_START; this.attribList = []; // The logic is organized so as to minimize the need to check // this.opt.fragment while parsing. const { fragmentOpt } = this; this.state = fragmentOpt ? S_TEXT : S_BEGIN; // We want these to be all true if we are dealing with a fragment. this.reportedTextBeforeRoot = this.reportedTextAfterRoot = this.closedRoot = this.sawRoot = fragmentOpt; // An XML declaration is intially possible only when parsing whole // documents. this.xmlDeclPossible = !fragmentOpt; this.xmlDeclExpects = ["version"]; this.entityReturnState = undefined; let { defaultXMLVersion } = this.opt; if (defaultXMLVersion === undefined) { if (this.opt.forceXMLVersion === true) { throw new Error("forceXMLVersion set but defaultXMLVersion is not set"); } defaultXMLVersion = "1.0"; } this.setXMLVersion(defaultXMLVersion); this.positionAtNewLine = 0; this.doctype = false; this._closed = false; this.xmlDecl = { version: undefined, encoding: undefined, standalone: undefined, }; this.line = 1; this.column = 0; this.ENTITIES = Object.create(XML_ENTITIES) as Record; this.readyHandler?.(); } /** * The stream position the parser is currently looking at. This field is * zero-based. * * This field is not based on counting Unicode characters but is to be * interpreted as a plain index into a JavaScript string. */ get position(): number { return this.chunkPosition + this.i; } /** * The column number of the next character to be read by the parser. * * This field is zero-based. (The first column in a line is 0.) * * This field reports the index at which the next character would be in the * line if the line were represented as a JavaScript string. Note that this * *can* be different to a count based on the number of *Unicode characters* * due to how JavaScript handles astral plane characters. * * See [[column]] for a number that corresponds to a count of Unicode * characters. */ get columnIndex(): number { return this.position - this.positionAtNewLine; } /** * Set an event listener on an event. The parser supports one handler per * event type. If you try to set an event handler over an existing handler, * the old handler is silently overwritten. * * @param name The event to listen to. * * @param handler The handler to set. */ on(name: N, handler: EventNameToHandler): void { // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access (this as any)[EVENT_NAME_TO_HANDLER_NAME[name]] = handler; } /** * Unset an event handler. * * @parma name The event to stop listening to. */ off(name: EventName): void { // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access (this as any)[EVENT_NAME_TO_HANDLER_NAME[name]] = undefined; } /** * Make an error object. The error object will have a message that contains * the ``fileName`` option passed at the creation of the parser. If position * tracking was turned on, it will also have line and column number * information. * * @param message The message describing the error to report. * * @returns An error object with a properly formatted message. */ makeError(message: string): Error { let msg = this.fileName ?? ""; if (this.trackPosition) { if (msg.length > 0) { msg += ":"; } msg += `${this.line}:${this.column}`; } if (msg.length > 0) { msg += ": "; } return new Error(msg + message); } /** * Report a parsing error. This method is made public so that client code may * check for issues that are outside the scope of this project and can report * errors. * * @param message The error to report. * * @returns this */ fail(message: string): this { const err = this.makeError(message); const handler = this.errorHandler; if (handler === undefined) { throw err; } else { handler(err); } return this; } /** * Write a XML data to the parser. * * @param chunk The XML data to write. * * @returns this */ // We do need object for the type here. Yes, it often causes problems // but not in this case. write(chunk: string | object | null): this { if (this.closed) { return this.fail("cannot write after close; assign an onready handler."); } let end = false; if (chunk === null) { // We cannot return immediately because carriedFromPrevious may need // processing. end = true; chunk = ""; } else if (typeof chunk === "object") { chunk = chunk.toString(); } // We checked if performing a pre-decomposition of the string into an array // of single complete characters (``Array.from(chunk)``) would be faster // than the current repeated calls to ``charCodeAt``. As of August 2018, it // isn't. (There may be Node-specific code that would perform faster than // ``Array.from`` but don't want to be dependent on Node.) if (this.carriedFromPrevious !== undefined) { // The previous chunk had char we must carry over. chunk = `${this.carriedFromPrevious}${chunk}`; this.carriedFromPrevious = undefined; } let limit = chunk.length; const lastCode = chunk.charCodeAt(limit - 1); if (!end && // A trailing CR or surrogate must be carried over to the next // chunk. (lastCode === CR || (lastCode >= 0xD800 && lastCode <= 0xDBFF))) { // The chunk ends with a character that must be carried over. We cannot // know how to handle it until we get the next chunk or the end of the // stream. So save it for later. this.carriedFromPrevious = chunk[limit - 1]; limit--; chunk = chunk.slice(0, limit); } const { stateTable } = this; this.chunk = chunk; this.i = 0; while (this.i < limit) { // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument stateTable[this.state].call(this as any); } this.chunkPosition += limit; return end ? this.end() : this; } /** * Close the current stream. Perform final well-formedness checks and reset * the parser tstate. * * @returns this */ close(): this { return this.write(null); } /** * Get a single code point out of the current chunk. This updates the current * position if we do position tracking. * * This is the algorithm to use for XML 1.0. * * @returns The character read. */ private getCode10(): number { const { chunk, i } = this; this.prevI = i; // Yes, we do this instead of doing this.i++. Doing it this way, we do not // read this.i again, which is a bit faster. this.i = i + 1; if (i >= chunk.length) { return EOC; } // Using charCodeAt and handling the surrogates ourselves is faster // than using codePointAt. const code = chunk.charCodeAt(i); this.column++; if (code < 0xD800) { if (code >= SPACE || code === TAB) { return code; } switch (code) { case NL: this.line++; this.column = 0; this.positionAtNewLine = this.position; return NL; case CR: // We may get NaN if we read past the end of the chunk, which is fine. if (chunk.charCodeAt(i + 1) === NL) { // A \r\n sequence is converted to \n so we have to skip over the // next character. We already know it has a size of 1 so ++ is fine // here. this.i = i + 2; } // Otherwise, a \r is just converted to \n, so we don't have to skip // ahead. // In either case, \r becomes \n. this.line++; this.column = 0; this.positionAtNewLine = this.position; return NL_LIKE; default: // If we get here, then code < SPACE and it is not NL CR or TAB. this.fail("disallowed character."); return code; } } if (code > 0xDBFF) { // This is a specialized version of isChar10 that takes into account // that in this context code > 0xDBFF and code <= 0xFFFF. So it does not // test cases that don't need testing. if (!(code >= 0xE000 && code <= 0xFFFD)) { this.fail("disallowed character."); } return code; } const final = 0x10000 + ((code - 0xD800) * 0x400) + (chunk.charCodeAt(i + 1) - 0xDC00); this.i = i + 2; // This is a specialized version of isChar10 that takes into account that in // this context necessarily final >= 0x10000. if (final > 0x10FFFF) { this.fail("disallowed character."); } return final; } /** * Get a single code point out of the current chunk. This updates the current * position if we do position tracking. * * This is the algorithm to use for XML 1.1. * * @returns {number} The character read. */ private getCode11(): number { const { chunk, i } = this; this.prevI = i; // Yes, we do this instead of doing this.i++. Doing it this way, we do not // read this.i again, which is a bit faster. this.i = i + 1; if (i >= chunk.length) { return EOC; } // Using charCodeAt and handling the surrogates ourselves is faster // than using codePointAt. const code = chunk.charCodeAt(i); this.column++; if (code < 0xD800) { if ((code > 0x1F && code < 0x7F) || (code > 0x9F && code !== LS) || code === TAB) { return code; } switch (code) { case NL: // 0xA this.line++; this.column = 0; this.positionAtNewLine = this.position; return NL; case CR: { // 0xD // We may get NaN if we read past the end of the chunk, which is // fine. const next = chunk.charCodeAt(i + 1); if (next === NL || next === NEL) { // A CR NL or CR NEL sequence is converted to NL so we have to skip // over the next character. We already know it has a size of 1. this.i = i + 2; } // Otherwise, a CR is just converted to NL, no skip. } /* yes, fall through */ case NEL: // 0x85 case LS: // Ox2028 this.line++; this.column = 0; this.positionAtNewLine = this.position; return NL_LIKE; default: this.fail("disallowed character."); return code; } } if (code > 0xDBFF) { // This is a specialized version of isCharAndNotRestricted that takes into // account that in this context code > 0xDBFF and code <= 0xFFFF. So it // does not test cases that don't need testing. if (!(code >= 0xE000 && code <= 0xFFFD)) { this.fail("disallowed character."); } return code; } const final = 0x10000 + ((code - 0xD800) * 0x400) + (chunk.charCodeAt(i + 1) - 0xDC00); this.i = i + 2; // This is a specialized version of isCharAndNotRestricted that takes into // account that in this context necessarily final >= 0x10000. if (final > 0x10FFFF) { this.fail("disallowed character."); } return final; } /** * Like ``getCode`` but with the return value normalized so that ``NL`` is * returned for ``NL_LIKE``. */ private getCodeNorm(): number { const c = this.getCode(); return c === NL_LIKE ? NL : c; } private unget(): void { this.i = this.prevI; this.column--; } /** * Capture characters into a buffer until encountering one of a set of * characters. * * @param chars An array of codepoints. Encountering a character in the array * ends the capture. (``chars`` may safely contain ``NL``.) * * @return The character code that made the capture end, or ``EOC`` if we hit * the end of the chunk. The return value cannot be NL_LIKE: NL is returned * instead. */ private captureTo(chars: number[]): number { let { i: start } = this; const { chunk } = this; // eslint-disable-next-line no-constant-condition while (true) { const c = this.getCode(); const isNLLike = c === NL_LIKE; const final = isNLLike ? NL : c; if (final === EOC || chars.includes(final)) { this.text += chunk.slice(start, this.prevI); return final; } if (isNLLike) { this.text += `${chunk.slice(start, this.prevI)}\n`; start = this.i; } } } /** * Capture characters into a buffer until encountering a character. * * @param char The codepoint that ends the capture. **NOTE ``char`` MAY NOT * CONTAIN ``NL``.** Passing ``NL`` will result in buggy behavior. * * @return ``true`` if we ran into the character. Otherwise, we ran into the * end of the current chunk. */ private captureToChar(char: number): boolean { let { i: start } = this; const { chunk } = this; // eslint-disable-next-line no-constant-condition while (true) { let c = this.getCode(); switch (c) { case NL_LIKE: this.text += `${chunk.slice(start, this.prevI)}\n`; start = this.i; c = NL; break; case EOC: this.text += chunk.slice(start); return false; default: } if (c === char) { this.text += chunk.slice(start, this.prevI); return true; } } } /** * Capture characters that satisfy ``isNameChar`` into the ``name`` field of * this parser. * * @return The character code that made the test fail, or ``EOC`` if we hit * the end of the chunk. The return value cannot be NL_LIKE: NL is returned * instead. */ private captureNameChars(): number { const { chunk, i: start } = this; // eslint-disable-next-line no-constant-condition while (true) { const c = this.getCode(); if (c === EOC) { this.name += chunk.slice(start); return EOC; } // NL is not a name char so we don't have to test specifically for it. if (!isNameChar(c)) { this.name += chunk.slice(start, this.prevI); return c === NL_LIKE ? NL : c; } } } /** * Skip white spaces. * * @return The character that ended the skip, or ``EOC`` if we hit * the end of the chunk. The return value cannot be NL_LIKE: NL is returned * instead. */ private skipSpaces(): number { // eslint-disable-next-line no-constant-condition while (true) { const c = this.getCodeNorm(); if (c === EOC || !isS(c)) { return c; } } } private setXMLVersion(version: string): void { this.currentXMLVersion = version; /* eslint-disable @typescript-eslint/unbound-method */ if (version === "1.0") { this.isChar = isChar10; this.getCode = this.getCode10; } else { this.isChar = isChar11; this.getCode = this.getCode11; } /* eslint-enable @typescript-eslint/unbound-method */ } // STATE ENGINE METHODS // This needs to be a state separate from S_BEGIN_WHITESPACE because we want // to be sure never to come back to this state later. private sBegin(): void { // We are essentially peeking at the first character of the chunk. Since // S_BEGIN can be in effect only when we start working on the first chunk, // the index at which we must look is necessarily 0. Note also that the // following test does not depend on decoding surrogates. // If the initial character is 0xFEFF, ignore it. if (this.chunk.charCodeAt(0) === 0xFEFF) { this.i++; this.column++; } this.state = S_BEGIN_WHITESPACE; } private sBeginWhitespace(): void { // We need to know whether we've encountered spaces or not because as soon // as we run into a space, an XML declaration is no longer possible. Rather // than slow down skipSpaces even in places where we don't care whether it // skipped anything or not, we check whether prevI is equal to the value of // i from before we skip spaces. const iBefore = this.i; const c = this.skipSpaces(); if (this.prevI !== iBefore) { this.xmlDeclPossible = false; } switch (c) { case LESS: this.state = S_OPEN_WAKA; // We could naively call closeText but in this state, it is not normal // to have text be filled with any data. if (this.text.length !== 0) { throw new Error("no-empty text at start"); } break; case EOC: break; default: this.unget(); this.state = S_TEXT; this.xmlDeclPossible = false; } } private sDoctype(): void { const c = this.captureTo(DOCTYPE_TERMINATOR); switch (c) { case GREATER: { this.doctypeHandler?.(this.text); this.text = ""; this.state = S_TEXT; this.doctype = true; // just remember that we saw it. break; } case EOC: break; default: this.text += String.fromCodePoint(c); if (c === OPEN_BRACKET) { this.state = S_DTD; } else if (isQuote(c)) { this.state = S_DOCTYPE_QUOTE; this.q = c; } } } private sDoctypeQuote(): void { const q = this.q!; if (this.captureToChar(q)) { this.text += String.fromCodePoint(q); this.q = null; this.state = S_DOCTYPE; } } private sDTD(): void { const c = this.captureTo(DTD_TERMINATOR); if (c === EOC) { return; } this.text += String.fromCodePoint(c); if (c === CLOSE_BRACKET) { this.state = S_DOCTYPE; } else if (c === LESS) { this.state = S_DTD_OPEN_WAKA; } else if (isQuote(c)) { this.state = S_DTD_QUOTED; this.q = c; } } private sDTDQuoted(): void { const q = this.q!; if (this.captureToChar(q)) { this.text += String.fromCodePoint(q); this.state = S_DTD; this.q = null; } } private sDTDOpenWaka(): void { const c = this.getCodeNorm(); this.text += String.fromCodePoint(c); switch (c) { case BANG: this.state = S_DTD_OPEN_WAKA_BANG; this.openWakaBang = ""; break; case QUESTION: this.state = S_DTD_PI; break; default: this.state = S_DTD; } } private sDTDOpenWakaBang(): void { const char = String.fromCodePoint(this.getCodeNorm()); const owb = this.openWakaBang += char; this.text += char; if (owb !== "-") { this.state = owb === "--" ? S_DTD_COMMENT : S_DTD; this.openWakaBang = ""; } } private sDTDComment(): void { if (this.captureToChar(MINUS)) { this.text += "-"; this.state = S_DTD_COMMENT_ENDING; } } private sDTDCommentEnding(): void { const c = this.getCodeNorm(); this.text += String.fromCodePoint(c); this.state = c === MINUS ? S_DTD_COMMENT_ENDED : S_DTD_COMMENT; } private sDTDCommentEnded(): void { const c = this.getCodeNorm(); this.text += String.fromCodePoint(c); if (c === GREATER) { this.state = S_DTD; } else { this.fail("malformed comment."); // will be recorded as // a comment of " blah -- bloo " this.state = S_DTD_COMMENT; } } private sDTDPI(): void { if (this.captureToChar(QUESTION)) { this.text += "?"; this.state = S_DTD_PI_ENDING; } } private sDTDPIEnding(): void { const c = this.getCodeNorm(); this.text += String.fromCodePoint(c); if (c === GREATER) { this.state = S_DTD; } } private sText(): void { // // We did try a version of saxes where the S_TEXT state was split in two // states: one for text inside the root element, and one for text // outside. This was avoiding having to test this.tags.length to decide // what implementation to actually use. // // Peformance testing on gigabyte-size files did not show any advantage to // using the two states solution instead of the current one. Conversely, it // made the code a bit more complicated elsewhere. For instance, a comment // can appear before the root element so when a comment ended it was // necessary to determine whether to return to the S_TEXT state or to the // new text-outside-root state. // if (this.tags.length !== 0) { this.handleTextInRoot(); } else { this.handleTextOutsideRoot(); } } private sEntity(): void { // This is essentially a specialized version of captureToChar(SEMICOLON...) let { i: start } = this; const { chunk } = this; // eslint-disable-next-line no-labels, no-restricted-syntax loop: // eslint-disable-next-line no-constant-condition while (true) { switch (this.getCode()) { case NL_LIKE: this.entity += `${chunk.slice(start, this.prevI)}\n`; start = this.i; break; case SEMICOLON: { const { entityReturnState } = this; const entity = this.entity + chunk.slice(start, this.prevI); this.state = entityReturnState!; let parsed: string; if (entity === "") { this.fail("empty entity name."); parsed = "&;"; } else { parsed = this.parseEntity(entity); this.entity = ""; } if (entityReturnState !== S_TEXT || this.textHandler !== undefined) { this.text += parsed; } // eslint-disable-next-line no-labels break loop; } case EOC: this.entity += chunk.slice(start); // eslint-disable-next-line no-labels break loop; default: } } } private sOpenWaka(): void { // Reminder: a state handler is called with at least one character // available in the current chunk. So the first call to get code inside of // a state handler cannot return ``EOC``. That's why we don't test // for it. const c = this.getCode(); // either a /, ?, !, or text is coming next. if (isNameStartChar(c)) { this.state = S_OPEN_TAG; this.unget(); this.xmlDeclPossible = false; } else { switch (c) { case FORWARD_SLASH: this.state = S_CLOSE_TAG; this.xmlDeclPossible = false; break; case BANG: this.state = S_OPEN_WAKA_BANG; this.openWakaBang = ""; this.xmlDeclPossible = false; break; case QUESTION: this.state = S_PI_FIRST_CHAR; break; default: this.fail("disallowed character in tag name"); this.state = S_TEXT; this.xmlDeclPossible = false; } } } private sOpenWakaBang(): void { this.openWakaBang += String.fromCodePoint(this.getCodeNorm()); switch (this.openWakaBang) { case "[CDATA[": if (!this.sawRoot && !this.reportedTextBeforeRoot) { this.fail("text data outside of root node."); this.reportedTextBeforeRoot = true; } if (this.closedRoot && !this.reportedTextAfterRoot) { this.fail("text data outside of root node."); this.reportedTextAfterRoot = true; } this.state = S_CDATA; this.openWakaBang = ""; break; case "--": this.state = S_COMMENT; this.openWakaBang = ""; break; case "DOCTYPE": this.state = S_DOCTYPE; if (this.doctype || this.sawRoot) { this.fail("inappropriately located doctype declaration."); } this.openWakaBang = ""; break; default: // 7 happens to be the maximum length of the string that can possibly // match one of the cases above. if (this.openWakaBang.length >= 7) { this.fail("incorrect syntax."); } } } private sComment(): void { if (this.captureToChar(MINUS)) { this.state = S_COMMENT_ENDING; } } private sCommentEnding(): void { const c = this.getCodeNorm(); if (c === MINUS) { this.state = S_COMMENT_ENDED; this.commentHandler?.(this.text); this.text = ""; } else { this.text += `-${String.fromCodePoint(c)}`; this.state = S_COMMENT; } } private sCommentEnded(): void { const c = this.getCodeNorm(); if (c !== GREATER) { this.fail("malformed comment."); // will be recorded as // a comment of " blah -- bloo " this.text += `--${String.fromCodePoint(c)}`; this.state = S_COMMENT; } else { this.state = S_TEXT; } } private sCData(): void { if (this.captureToChar(CLOSE_BRACKET)) { this.state = S_CDATA_ENDING; } } private sCDataEnding(): void { const c = this.getCodeNorm(); if (c === CLOSE_BRACKET) { this.state = S_CDATA_ENDING_2; } else { this.text += `]${String.fromCodePoint(c)}`; this.state = S_CDATA; } } private sCDataEnding2(): void { const c = this.getCodeNorm(); switch (c) { case GREATER: { this.cdataHandler?.(this.text); this.text = ""; this.state = S_TEXT; break; } case CLOSE_BRACKET: this.text += "]"; break; default: this.text += `]]${String.fromCodePoint(c)}`; this.state = S_CDATA; } } // We need this separate state to check the first character fo the pi target // with this.nameStartCheck which allows less characters than this.nameCheck. private sPIFirstChar(): void { const c = this.getCodeNorm(); // This is first because in the case where the file is well-formed this is // the branch taken. We optimize for well-formedness. if (this.nameStartCheck(c)) { this.piTarget += String.fromCodePoint(c); this.state = S_PI_REST; } else if (c === QUESTION || isS(c)) { this.fail("processing instruction without a target."); this.state = c === QUESTION ? S_PI_ENDING : S_PI_BODY; } else { this.fail("disallowed character in processing instruction name."); this.piTarget += String.fromCodePoint(c); this.state = S_PI_REST; } } private sPIRest(): void { // Capture characters into a piTarget while ``this.nameCheck`` run on the // character read returns true. const { chunk, i: start } = this; // eslint-disable-next-line no-constant-condition while (true) { const c = this.getCodeNorm(); if (c === EOC) { this.piTarget += chunk.slice(start); return; } // NL cannot satisfy this.nameCheck so we don't have to test specifically // for it. if (!this.nameCheck(c)) { this.piTarget += chunk.slice(start, this.prevI); const isQuestion = c === QUESTION; if (isQuestion || isS(c)) { if (this.piTarget === "xml") { if (!this.xmlDeclPossible) { this.fail( "an XML declaration must be at the start of the document."); } this.state = isQuestion ? S_XML_DECL_ENDING : S_XML_DECL_NAME_START; } else { this.state = isQuestion ? S_PI_ENDING : S_PI_BODY; } } else { this.fail("disallowed character in processing instruction name."); this.piTarget += String.fromCodePoint(c); } break; } } } private sPIBody(): void { if (this.text.length === 0) { const c = this.getCodeNorm(); if (c === QUESTION) { this.state = S_PI_ENDING; } else if (!isS(c)) { this.text = String.fromCodePoint(c); } } // The question mark character is not valid inside any of the XML // declaration name/value pairs. else if (this.captureToChar(QUESTION)) { this.state = S_PI_ENDING; } } private sPIEnding(): void { const c = this.getCodeNorm(); if (c === GREATER) { const { piTarget } = this; if (piTarget.toLowerCase() === "xml") { this.fail( "the XML declaration must appear at the start of the document."); } this.piHandler?.({ target: piTarget, body: this.text, }); this.piTarget = this.text = ""; this.state = S_TEXT; } else if (c === QUESTION) { // We ran into ?? as part of a processing instruction. We initially took // the first ? as a sign that the PI was ending, but it is not. So we have // to add it to the body but we take the new ? as a sign that the PI is // ending. this.text += "?"; } else { this.text += `?${String.fromCodePoint(c)}`; this.state = S_PI_BODY; } this.xmlDeclPossible = false; } private sXMLDeclNameStart(): void { const c = this.skipSpaces(); // The question mark character is not valid inside any of the XML // declaration name/value pairs. if (c === QUESTION) { // It is valid to go to S_XML_DECL_ENDING from this state. this.state = S_XML_DECL_ENDING; return; } if (c !== EOC) { this.state = S_XML_DECL_NAME; this.name = String.fromCodePoint(c); } } private sXMLDeclName(): void { const c = this.captureTo(XML_DECL_NAME_TERMINATOR); // The question mark character is not valid inside any of the XML // declaration name/value pairs. if (c === QUESTION) { this.state = S_XML_DECL_ENDING; this.name += this.text; this.text = ""; this.fail("XML declaration is incomplete."); return; } if (!(isS(c) || c === EQUAL)) { return; } this.name += this.text; this.text = ""; if (!this.xmlDeclExpects.includes(this.name)) { switch (this.name.length) { case 0: this.fail("did not expect any more name/value pairs."); break; case 1: this.fail(`expected the name ${this.xmlDeclExpects[0]}.`); break; default: this.fail(`expected one of ${this.xmlDeclExpects.join(", ")}`); } } this.state = c === EQUAL ? S_XML_DECL_VALUE_START : S_XML_DECL_EQ; } private sXMLDeclEq(): void { const c = this.getCodeNorm(); // The question mark character is not valid inside any of the XML // declaration name/value pairs. if (c === QUESTION) { this.state = S_XML_DECL_ENDING; this.fail("XML declaration is incomplete."); return; } if (isS(c)) { return; } if (c !== EQUAL) { this.fail("value required."); } this.state = S_XML_DECL_VALUE_START; } private sXMLDeclValueStart(): void { const c = this.getCodeNorm(); // The question mark character is not valid inside any of the XML // declaration name/value pairs. if (c === QUESTION) { this.state = S_XML_DECL_ENDING; this.fail("XML declaration is incomplete."); return; } if (isS(c)) { return; } if (!isQuote(c)) { this.fail("value must be quoted."); this.q = SPACE; } else { this.q = c; } this.state = S_XML_DECL_VALUE; } private sXMLDeclValue(): void { const c = this.captureTo([this.q!, QUESTION]); // The question mark character is not valid inside any of the XML // declaration name/value pairs. if (c === QUESTION) { this.state = S_XML_DECL_ENDING; this.text = ""; this.fail("XML declaration is incomplete."); return; } if (c === EOC) { return; } const value = this.text; this.text = ""; switch (this.name) { case "version": { this.xmlDeclExpects = ["encoding", "standalone"]; const version = value; this.xmlDecl.version = version; // This is the test specified by XML 1.0 but it is fine for XML 1.1. if (!/^1\.[0-9]+$/.test(version)) { this.fail("version number must match /^1\\.[0-9]+$/."); } // When forceXMLVersion is set, the XML declaration is ignored. else if (!(this.opt.forceXMLVersion as boolean)) { this.setXMLVersion(version); } break; } case "encoding": if (!/^[A-Za-z][A-Za-z0-9._-]*$/.test(value)) { this.fail("encoding value must match \ /^[A-Za-z0-9][A-Za-z0-9._-]*$/."); } this.xmlDeclExpects = ["standalone"]; this.xmlDecl.encoding = value; break; case "standalone": if (value !== "yes" && value !== "no") { this.fail("standalone value must match \"yes\" or \"no\"."); } this.xmlDeclExpects = []; this.xmlDecl.standalone = value; break; default: // We don't need to raise an error here since we've already raised one // when checking what name was expected. } this.name = ""; this.state = S_XML_DECL_SEPARATOR; } private sXMLDeclSeparator(): void { const c = this.getCodeNorm(); // The question mark character is not valid inside any of the XML // declaration name/value pairs. if (c === QUESTION) { // It is valid to go to S_XML_DECL_ENDING from this state. this.state = S_XML_DECL_ENDING; return; } if (!isS(c)) { this.fail("whitespace required."); this.unget(); } this.state = S_XML_DECL_NAME_START; } private sXMLDeclEnding(): void { const c = this.getCodeNorm(); if (c === GREATER) { if (this.piTarget !== "xml") { this.fail("processing instructions are not allowed before root."); } else if (this.name !== "version" && this.xmlDeclExpects.includes("version")) { this.fail("XML declaration must contain a version."); } this.xmldeclHandler?.(this.xmlDecl); this.name = ""; this.piTarget = this.text = ""; this.state = S_TEXT; } else { // We got here because the previous character was a ?, but the question // mark character is not valid inside any of the XML declaration // name/value pairs. this.fail( "The character ? is disallowed anywhere in XML declarations."); } this.xmlDeclPossible = false; } private sOpenTag(): void { const c = this.captureNameChars(); if (c === EOC) { return; } const tag: SaxesTagIncomplete = this.tag = { name: this.name, attributes: Object.create(null) as Record, }; this.name = ""; if (this.xmlnsOpt) { this.topNS = tag.ns = Object.create(null) as Record; } this.openTagStartHandler?.(tag as StartTagForOptions); this.sawRoot = true; if (!this.fragmentOpt && this.closedRoot) { this.fail("documents may contain only one root."); } switch (c) { case GREATER: this.openTag(); break; case FORWARD_SLASH: this.state = S_OPEN_TAG_SLASH; break; default: if (!isS(c)) { this.fail("disallowed character in tag name."); } this.state = S_ATTRIB; } } private sOpenTagSlash(): void { if (this.getCode() === GREATER) { this.openSelfClosingTag(); } else { this.fail("forward-slash in opening tag not followed by >."); this.state = S_ATTRIB; } } private sAttrib(): void { const c = this.skipSpaces(); if (c === EOC) { return; } if (isNameStartChar(c)) { this.unget(); this.state = S_ATTRIB_NAME; } else if (c === GREATER) { this.openTag(); } else if (c === FORWARD_SLASH) { this.state = S_OPEN_TAG_SLASH; } else { this.fail("disallowed character in attribute name."); } } private sAttribName(): void { const c = this.captureNameChars(); if (c === EQUAL) { this.state = S_ATTRIB_VALUE; } else if (isS(c)) { this.state = S_ATTRIB_NAME_SAW_WHITE; } else if (c === GREATER) { this.fail("attribute without value."); this.pushAttrib(this.name, this.name); this.name = this.text = ""; this.openTag(); } else if (c !== EOC) { this.fail("disallowed character in attribute name."); } } private sAttribNameSawWhite(): void { const c = this.skipSpaces(); switch (c) { case EOC: return; case EQUAL: this.state = S_ATTRIB_VALUE; break; default: this.fail("attribute without value."); // Should we do this??? // this.tag.attributes[this.name] = ""; this.text = ""; this.name = ""; if (c === GREATER) { this.openTag(); } else if (isNameStartChar(c)) { this.unget(); this.state = S_ATTRIB_NAME; } else { this.fail("disallowed character in attribute name."); this.state = S_ATTRIB; } } } private sAttribValue(): void { const c = this.getCodeNorm(); if (isQuote(c)) { this.q = c; this.state = S_ATTRIB_VALUE_QUOTED; } else if (!isS(c)) { this.fail("unquoted attribute value."); this.state = S_ATTRIB_VALUE_UNQUOTED; this.unget(); } } private sAttribValueQuoted(): void { // We deliberately do not use captureTo here. The specialized code we use // here is faster than using captureTo. const { q, chunk } = this; let { i: start } = this; // eslint-disable-next-line no-constant-condition while (true) { switch (this.getCode()) { case q: this.pushAttrib(this.name, this.text + chunk.slice(start, this.prevI)); this.name = this.text = ""; this.q = null; this.state = S_ATTRIB_VALUE_CLOSED; return; case AMP: this.text += chunk.slice(start, this.prevI); this.state = S_ENTITY; this.entityReturnState = S_ATTRIB_VALUE_QUOTED; return; case NL: case NL_LIKE: case TAB: this.text += `${chunk.slice(start, this.prevI)} `; start = this.i; break; case LESS: this.text += chunk.slice(start, this.prevI); this.fail("disallowed character."); return; case EOC: this.text += chunk.slice(start); return; default: } } } private sAttribValueClosed(): void { const c = this.getCodeNorm(); if (isS(c)) { this.state = S_ATTRIB; } else if (c === GREATER) { this.openTag(); } else if (c === FORWARD_SLASH) { this.state = S_OPEN_TAG_SLASH; } else if (isNameStartChar(c)) { this.fail("no whitespace between attributes."); this.unget(); this.state = S_ATTRIB_NAME; } else { this.fail("disallowed character in attribute name."); } } private sAttribValueUnquoted(): void { // We don't do anything regarding EOL or space handling for unquoted // attributes. We already have failed by the time we get here, and the // contract that saxes upholds states that upon failure, it is not safe to // rely on the data passed to event handlers (other than // ``onerror``). Passing "bad" data is not a problem. const c = this.captureTo(ATTRIB_VALUE_UNQUOTED_TERMINATOR); switch (c) { case AMP: this.state = S_ENTITY; this.entityReturnState = S_ATTRIB_VALUE_UNQUOTED; break; case LESS: this.fail("disallowed character."); break; case EOC: break; default: if (this.text.includes("]]>")) { this.fail("the string \"]]>\" is disallowed in char data."); } this.pushAttrib(this.name, this.text); this.name = this.text = ""; if (c === GREATER) { this.openTag(); } else { this.state = S_ATTRIB; } } } private sCloseTag(): void { const c = this.captureNameChars(); if (c === GREATER) { this.closeTag(); } else if (isS(c)) { this.state = S_CLOSE_TAG_SAW_WHITE; } else if (c !== EOC) { this.fail("disallowed character in closing tag."); } } private sCloseTagSawWhite(): void { switch (this.skipSpaces()) { case GREATER: this.closeTag(); break; case EOC: break; default: this.fail("disallowed character in closing tag."); } } // END OF STATE ENGINE METHODS private handleTextInRoot(): void { // This is essentially a specialized version of captureTo which is optimized // for performing the ]]> check. A previous version of this code, checked // ``this.text`` for the presence of ]]>. It simplified the code but was // very costly when character data contained a lot of entities to be parsed. // // Since we are using a specialized loop, we also keep track of the presence // of ]]> in text data. The sequence ]]> is forbidden to appear as-is. // let { i: start, forbiddenState } = this; const { chunk, textHandler: handler } = this; // eslint-disable-next-line no-labels, no-restricted-syntax scanLoop: // eslint-disable-next-line no-constant-condition while (true) { switch (this.getCode()) { case LESS: { this.state = S_OPEN_WAKA; if (handler !== undefined) { const { text } = this; const slice = chunk.slice(start, this.prevI); if (text.length !== 0) { handler(text + slice); this.text = ""; } else if (slice.length !== 0) { handler(slice); } } forbiddenState = FORBIDDEN_START; // eslint-disable-next-line no-labels break scanLoop; } case AMP: this.state = S_ENTITY; this.entityReturnState = S_TEXT; if (handler !== undefined) { this.text += chunk.slice(start, this.prevI); } forbiddenState = FORBIDDEN_START; // eslint-disable-next-line no-labels break scanLoop; case CLOSE_BRACKET: switch (forbiddenState) { case FORBIDDEN_START: forbiddenState = FORBIDDEN_BRACKET; break; case FORBIDDEN_BRACKET: forbiddenState = FORBIDDEN_BRACKET_BRACKET; break; case FORBIDDEN_BRACKET_BRACKET: break; default: throw new Error("impossible state"); } break; case GREATER: if (forbiddenState === FORBIDDEN_BRACKET_BRACKET) { this.fail("the string \"]]>\" is disallowed in char data."); } forbiddenState = FORBIDDEN_START; break; case NL_LIKE: if (handler !== undefined) { this.text += `${chunk.slice(start, this.prevI)}\n`; } start = this.i; forbiddenState = FORBIDDEN_START; break; case EOC: if (handler !== undefined) { this.text += chunk.slice(start); } // eslint-disable-next-line no-labels break scanLoop; default: forbiddenState = FORBIDDEN_START; } } this.forbiddenState = forbiddenState; } private handleTextOutsideRoot(): void { // This is essentially a specialized version of captureTo which is optimized // for a specialized task. We keep track of the presence of non-space // characters in the text since these are errors when appearing outside the // document root element. let { i: start } = this; const { chunk, textHandler: handler } = this; let nonSpace = false; // eslint-disable-next-line no-labels, no-restricted-syntax outRootLoop: // eslint-disable-next-line no-constant-condition while (true) { const code = this.getCode(); switch (code) { case LESS: { this.state = S_OPEN_WAKA; if (handler !== undefined) { const { text } = this; const slice = chunk.slice(start, this.prevI); if (text.length !== 0) { handler(text + slice); this.text = ""; } else if (slice.length !== 0) { handler(slice); } } // eslint-disable-next-line no-labels break outRootLoop; } case AMP: this.state = S_ENTITY; this.entityReturnState = S_TEXT; if (handler !== undefined) { this.text += chunk.slice(start, this.prevI); } nonSpace = true; // eslint-disable-next-line no-labels break outRootLoop; case NL_LIKE: if (handler !== undefined) { this.text += `${chunk.slice(start, this.prevI)}\n`; } start = this.i; break; case EOC: if (handler !== undefined) { this.text += chunk.slice(start); } // eslint-disable-next-line no-labels break outRootLoop; default: if (!isS(code)) { nonSpace = true; } } } if (!nonSpace) { return; } // We use the reportedTextBeforeRoot and reportedTextAfterRoot flags // to avoid reporting errors for every single character that is out of // place. if (!this.sawRoot && !this.reportedTextBeforeRoot) { this.fail("text data outside of root node."); this.reportedTextBeforeRoot = true; } if (this.closedRoot && !this.reportedTextAfterRoot) { this.fail("text data outside of root node."); this.reportedTextAfterRoot = true; } } private pushAttribNS(name: string, value: string): void { const { prefix, local } = this.qname(name); const attr = { name, prefix, local, value }; this.attribList.push(attr); this.attributeHandler?.(attr as AttributeEventForOptions); if (prefix === "xmlns") { const trimmed = value.trim(); if (this.currentXMLVersion === "1.0" && trimmed === "") { this.fail("invalid attempt to undefine prefix in XML 1.0"); } this.topNS![local] = trimmed; nsPairCheck(this, local, trimmed); } else if (name === "xmlns") { const trimmed = value.trim(); this.topNS![""] = trimmed; nsPairCheck(this, "", trimmed); } } private pushAttribPlain(name: string, value: string): void { const attr = { name, value }; this.attribList.push(attr); this.attributeHandler?.(attr as AttributeEventForOptions); } /** * End parsing. This performs final well-formedness checks and resets the * parser to a clean state. * * @returns this */ private end(): this { if (!this.sawRoot) { this.fail("document must contain a root element."); } const { tags } = this; while (tags.length > 0) { const tag = tags.pop()!; this.fail(`unclosed tag: ${tag.name}`); } if ((this.state !== S_BEGIN) && (this.state !== S_TEXT)) { this.fail("unexpected end."); } const { text } = this; if (text.length !== 0) { this.textHandler?.(text); this.text = ""; } this._closed = true; this.endHandler?.(); this._init(); return this; } /** * Resolve a namespace prefix. * * @param prefix The prefix to resolve. * * @returns The namespace URI or ``undefined`` if the prefix is not defined. */ resolve(prefix: string): string | undefined { let uri = this.topNS![prefix]; if (uri !== undefined) { return uri; } const { tags } = this; for (let index = tags.length - 1; index >= 0; index--) { uri = tags[index]!.ns![prefix]; if (uri !== undefined) { return uri; } } uri = this.ns[prefix]; if (uri !== undefined) { return uri; } return this.opt.resolvePrefix?.(prefix); } /** * Parse a qname into its prefix and local name parts. * * @param name The name to parse * * @returns */ private qname(name: string): { prefix: string; local: string } { // This is faster than using name.split(":"). const colon = name.indexOf(":"); if (colon === -1) { return { prefix: "", local: name }; } const local = name.slice(colon + 1); const prefix = name.slice(0, colon); if (prefix === "" || local === "" || local.includes(":")) { this.fail(`malformed name: ${name}.`); } return { prefix, local }; } private processAttribsNS(): void { const { attribList } = this; const tag = this.tag!; { // add namespace info to tag const { prefix, local } = this.qname(tag.name); tag.prefix = prefix; tag.local = local; const uri = tag.uri = this.resolve(prefix) ?? ""; if (prefix !== "") { if (prefix === "xmlns") { this.fail("tags may not have \"xmlns\" as prefix."); } if (uri === "") { this.fail(`unbound namespace prefix: ${JSON.stringify(prefix)}.`); tag.uri = prefix; } } } if (attribList.length === 0) { return; } const { attributes } = tag; const seen = new Set(); // Note: do not apply default ns to attributes: // http://www.w3.org/TR/REC-xml-names/#defaulting for (const attr of attribList as SaxesAttributeNSIncomplete[]) { const { name, prefix, local } = attr; let uri; let eqname; if (prefix === "") { uri = name === "xmlns" ? XMLNS_NAMESPACE : ""; eqname = name; } else { uri = this.resolve(prefix); // if there's any attributes with an undefined namespace, // then fail on them now. if (uri === undefined) { this.fail(`unbound namespace prefix: ${JSON.stringify(prefix)}.`); uri = prefix; } eqname = `{${uri}}${local}`; } if (seen.has(eqname)) { this.fail(`duplicate attribute: ${eqname}.`); } seen.add(eqname); attr.uri = uri; attributes[name] = attr; } this.attribList = []; } private processAttribsPlain(): void { const { attribList } = this; // eslint-disable-next-line prefer-destructuring const attributes = this.tag!.attributes; for (const { name, value } of attribList) { if (attributes[name] !== undefined) { this.fail(`duplicate attribute: ${name}.`); } attributes[name] = value; } this.attribList = []; } /** * Handle a complete open tag. This parser code calls this once it has seen * the whole tag. This method checks for well-formeness and then emits * ``onopentag``. */ private openTag(): void { this.processAttribs(); const { tags } = this; const tag = this.tag as SaxesTag; tag.isSelfClosing = false; // There cannot be any pending text here due to the onopentagstart that was // necessarily emitted before we get here. So we do not check text. this.openTagHandler?.(tag as TagForOptions); tags.push(tag); this.state = S_TEXT; this.name = ""; } /** * Handle a complete self-closing tag. This parser code calls this once it has * seen the whole tag. This method checks for well-formeness and then emits * ``onopentag`` and ``onclosetag``. */ private openSelfClosingTag(): void { this.processAttribs(); const { tags } = this; const tag = this.tag as SaxesTag; tag.isSelfClosing = true; // There cannot be any pending text here due to the onopentagstart that was // necessarily emitted before we get here. So we do not check text. this.openTagHandler?.(tag as TagForOptions); this.closeTagHandler?.(tag as TagForOptions); const top = this.tag = tags[tags.length - 1] ?? null; if (top === null) { this.closedRoot = true; } this.state = S_TEXT; this.name = ""; } /** * Handle a complete close tag. This parser code calls this once it has seen * the whole tag. This method checks for well-formeness and then emits * ``onclosetag``. */ private closeTag(): void { const { tags, name } = this; // Our state after this will be S_TEXT, no matter what, and we can clear // tagName now. this.state = S_TEXT; this.name = ""; if (name === "") { this.fail("weird empty close tag."); this.text += ""; return; } const handler = this.closeTagHandler; let l = tags.length; while (l-- > 0) { const tag = this.tag = tags.pop() as SaxesTag; this.topNS = tag.ns!; handler?.(tag as TagForOptions); if (tag.name === name) { break; } this.fail("unexpected close tag."); } if (l === 0) { this.closedRoot = true; } else if (l < 0) { this.fail(`unmatched closing tag: ${name}.`); this.text += ``; } } /** * Resolves an entity. Makes any necessary well-formedness checks. * * @param entity The entity to resolve. * * @returns The parsed entity. */ private parseEntity(entity: string): string { // startsWith would be significantly slower for this test. if (entity[0] !== "#") { const defined = this.ENTITIES[entity]; if (defined !== undefined) { return defined; } this.fail(this.isName(entity) ? "undefined entity." : "disallowed character in entity name."); return `&${entity};`; } let num = NaN; if (entity[1] === "x" && /^#x[0-9a-f]+$/i.test(entity)) { num = parseInt(entity.slice(2), 16); } else if (/^#[0-9]+$/.test(entity)) { num = parseInt(entity.slice(1), 10); } // The character reference is required to match the CHAR production. if (!this.isChar(num)) { this.fail("malformed character entity."); return `&${entity};`; } return String.fromCodePoint(num); } } saxes-6.0.0/test/000077500000000000000000000000001414202165000136125ustar00rootroot00000000000000saxes-6.0.0/test/attribute-name.ts000066400000000000000000000020701414202165000171020ustar00rootroot00000000000000import { test } from "./testutil"; test({ name: "attribute name", xml: "", expect: [ ["opentagstart", { name: "root", attributes: {}, ns: {} }], ["attribute", { name: "length", value: "12345", prefix: "", local: "length", }], [ "opentag", { name: "root", prefix: "", local: "root", uri: "", attributes: { length: { name: "length", value: "12345", prefix: "", local: "length", uri: "", }, }, ns: {}, isSelfClosing: false, }, ], [ "closetag", { name: "root", prefix: "", local: "root", uri: "", attributes: { length: { name: "length", value: "12345", prefix: "", local: "length", uri: "", }, }, ns: {}, isSelfClosing: false, }, ], ], opt: { xmlns: true, }, }); saxes-6.0.0/test/attribute-no-space.ts000066400000000000000000000053351414202165000176760ustar00rootroot00000000000000import { test } from "./testutil"; // should give an error, but still parse test({ name: "attributes without a space", xml: "", expect: [ ["opentagstart", { name: "root", attributes: {} }], ["attribute", { name: "attr1", value: "first", }], ["error", "1:20: no whitespace between attributes."], ["attribute", { name: "attr2", value: "second", }], ["opentag", { name: "root", attributes: { attr1: "first", attr2: "second", }, isSelfClosing: true, }], ["closetag", { name: "root", attributes: { attr1: "first", attr2: "second", }, isSelfClosing: true, }], ], }); // other cases should still pass test({ name: "attributes separated by a space", xml: "", expect: [ ["opentagstart", { name: "root", attributes: {}, }], ["attribute", { name: "attr1", value: "first", }], ["attribute", { name: "attr2", value: "second", }], ["opentag", { name: "root", attributes: { attr1: "first", attr2: "second", }, isSelfClosing: true, }], ["closetag", { name: "root", attributes: { attr1: "first", attr2: "second", }, isSelfClosing: true, }], ], }); // other cases should still pass test({ name: "attributes separated by a newline", xml: "", expect: [ ["opentagstart", { name: "root", attributes: {}, }], ["attribute", { name: "attr1", value: "first", }], ["attribute", { name: "attr2", value: "second", }], ["opentag", { name: "root", attributes: { attr1: "first", attr2: "second", }, isSelfClosing: true, }], ["closetag", { name: "root", attributes: { attr1: "first", attr2: "second", }, isSelfClosing: true, }], ], }); // other cases should still pass test({ name: "attributes separated by spaces", xml: "", expect: [ ["opentagstart", { name: "root", attributes: {}, }], ["attribute", { name: "attr1", value: "first", }], ["attribute", { name: "attr2", value: "second", }], ["opentag", { name: "root", attributes: { attr1: "first", attr2: "second", }, isSelfClosing: true, }], ["closetag", { name: "root", attributes: { attr1: "first", attr2: "second", }, isSelfClosing: true, }], ], }); saxes-6.0.0/test/attribute-normalization.ts000066400000000000000000000014471414202165000210570ustar00rootroot00000000000000import { test } from "./testutil"; test({ name: "attribute normalization", // \n\r is converted to \n\n internally. The reverse would be converted to // only \n. // eslint-disable-next-line @typescript-eslint/quotes xml: ``, expect: [ ["opentagstart", { name: "root", attributes: {}, }], ["attribute", { name: "attr1", value: "\r \n\t", }], ["attribute", { name: "attr2", value: " a b", }], ["opentag", { name: "root", attributes: { attr1: "\r \n\t", attr2: " a b" }, isSelfClosing: true, }], ["closetag", { name: "root", attributes: { attr1: "\r \n\t", attr2: " a b" }, isSelfClosing: true, }], ], opt: { }, }); saxes-6.0.0/test/attribute-unquoted.ts000066400000000000000000000022571414202165000200350ustar00rootroot00000000000000import { SaxesParser } from "../build/dist/saxes"; import { test } from "./testutil"; test({ name: "attribute unquoted", expect: [ ["opentagstart", { name: "root", attributes: {}, ns: {} }], ["error", "1:14: unquoted attribute value."], ["attribute", { name: "length", value: "12345", prefix: "", local: "length", }], ["opentag", { name: "root", attributes: { length: { name: "length", value: "12345", prefix: "", local: "length", uri: "", }, }, ns: {}, prefix: "", local: "root", uri: "", isSelfClosing: false, }], ["closetag", { name: "root", attributes: { length: { name: "length", value: "12345", prefix: "", local: "length", uri: "", }, }, ns: {}, prefix: "", local: "root", uri: "", isSelfClosing: false, }], ["end", undefined], ["ready", undefined], ], opt: { xmlns: true, }, fn(parser: SaxesParser): void { parser.write("").close(); }, }); saxes-6.0.0/test/bad-entities.ts000066400000000000000000000020421414202165000165300ustar00rootroot00000000000000import { test } from "./testutil"; test({ name: "empty entity", xml: "&;", expect: [ ["opentagstart", { name: "r", attributes: {} }], ["opentag", { name: "r", attributes: {}, isSelfClosing: false }], ["error", "1:5: empty entity name."], ["text", "&;"], ["closetag", { name: "r", attributes: {}, isSelfClosing: false }], ], }); test({ name: "empty decimal entity", xml: "&#;", expect: [ ["opentagstart", { name: "r", attributes: {} }], ["opentag", { name: "r", attributes: {}, isSelfClosing: false }], ["error", "1:6: malformed character entity."], ["text", "&#;"], ["closetag", { name: "r", attributes: {}, isSelfClosing: false }], ], }); test({ name: "empty hex entity", xml: "&#x;", expect: [ ["opentagstart", { name: "r", attributes: {} }], ["opentag", { name: "r", attributes: {}, isSelfClosing: false }], ["error", "1:7: malformed character entity."], ["text", "&#x;"], ["closetag", { name: "r", attributes: {}, isSelfClosing: false }], ], }); saxes-6.0.0/test/bom.ts000066400000000000000000000041621414202165000147420ustar00rootroot00000000000000import { test } from "./testutil"; // BOM at the very begining of the stream should be ignored test({ name: "BOM at start", xml: "\uFEFF

", expect: [ ["opentagstart", { name: "P", attributes: {} }], ["opentag", { name: "P", attributes: {}, isSelfClosing: false }], ["closetag", { name: "P", attributes: {}, isSelfClosing: false }], ], }); // In all other places it should be consumed test({ name: "BOM in contents", xml: "\uFEFF

\uFEFFStarts and ends with BOM\uFEFF

", expect: [ ["opentagstart", { name: "P", attributes: {} }], ["attribute", { name: "BOM", value: "\uFEFF" }], ["opentag", { name: "P", attributes: { BOM: "\uFEFF" }, isSelfClosing: false, }], ["text", "\uFEFFStarts and ends with BOM\uFEFF"], ["closetag", { name: "P", attributes: { BOM: "\uFEFF" }, isSelfClosing: false, }], ], }); // BOM after a whitespace is an error test({ name: "BOM outside of root, but not initial", xml: " \uFEFF

", expect: [ ["text", "\uFEFF"], ["error", "1:3: text data outside of root node."], ["opentagstart", { name: "P", attributes: {} }], ["opentag", { name: "P", attributes: {}, isSelfClosing: false }], ["closetag", { name: "P", attributes: {}, isSelfClosing: false }], ], }); // There is only one BOM allowed at the start test({ name: "multiple BOMs", xml: "\uFEFF\uFEFF

", expect: [ ["text", "\uFEFF"], ["error", "1:3: text data outside of root node."], ["opentagstart", { name: "P", attributes: {} }], ["opentag", { name: "P", attributes: {}, isSelfClosing: false }], ["closetag", { name: "P", attributes: {}, isSelfClosing: false }], ], }); // There is only one BOM allowed at the start test({ name: "multiple BOMs (multiple chunks)", xml: ["\uFEFF", "\uFEFF

"], expect: [ ["text", "\uFEFF"], ["error", "1:3: text data outside of root node."], ["opentagstart", { name: "P", attributes: {} }], ["opentag", { name: "P", attributes: {}, isSelfClosing: false }], ["closetag", { name: "P", attributes: {}, isSelfClosing: false }], ], }); saxes-6.0.0/test/cdata-chunked.ts000066400000000000000000000010231414202165000166510ustar00rootroot00000000000000import { SaxesParser } from "../build/dist/saxes"; import { test } from "./testutil"; test({ name: "cdata chunked", expect: [ ["opentagstart", { name: "r", attributes: {} }], ["opentag", { name: "r", attributes: {}, isSelfClosing: false }], ["cdata", " this is character data  "], ["closetag", { name: "r", attributes: {}, isSelfClosing: false }], ], fn(parser: SaxesParser): void { parser.write("") .close(); }, }); saxes-6.0.0/test/cdata-end-split.ts000066400000000000000000000007661414202165000171440ustar00rootroot00000000000000import { SaxesParser } from "../build/dist/saxes"; import { test } from "./testutil"; test({ name: "cadat end split", expect: [ ["opentagstart", { name: "r", attributes: {} }], ["opentag", { name: "r", attributes: {}, isSelfClosing: false }], ["cdata", " this is "], ["closetag", { name: "r", attributes: {}, isSelfClosing: false }], ], fn(parser: SaxesParser): void { parser.write("") .write("") .close(); }, }); saxes-6.0.0/test/cdata-fake-end.ts000066400000000000000000000015761414202165000167170ustar00rootroot00000000000000import { SaxesParser } from "../build/dist/saxes"; import { test } from "./testutil"; test({ name: "cdata fake end", expect: [ ["opentagstart", { name: "r", attributes: {} }], ["opentag", { name: "r", attributes: {}, isSelfClosing: false }], ["cdata", "[[[[[[[[]]]]]]]]"], ["closetag", { name: "r", attributes: {}, isSelfClosing: false }], ], fn(parser: SaxesParser): void { const x = ""; for (let i = 0; i < x.length; i++) { parser.write(x.charAt(i)); } parser.close(); }, }); test({ name: "cdata fake end 2", expect: [ ["opentagstart", { name: "r", attributes: {} }], ["opentag", { name: "r", attributes: {}, isSelfClosing: false }], ["cdata", "[[[[[[[[]]]]]]]]"], ["closetag", { name: "r", attributes: {}, isSelfClosing: false }], ], xml: "", }); saxes-6.0.0/test/cdata-multiple.ts000066400000000000000000000011461414202165000170710ustar00rootroot00000000000000import { SaxesParser } from "../build/dist/saxes"; import { test } from "./testutil"; test({ name: "cdata multiple", expect: [ ["opentagstart", { name: "r", attributes: {} }], ["opentag", { name: "r", attributes: {}, isSelfClosing: false }], ["cdata", " this is "], ["cdata", "character data  "], ["closetag", { name: "r", attributes: {}, isSelfClosing: false }], ], fn(parser: SaxesParser): void { parser.write("").write("") .close(); }, }); saxes-6.0.0/test/cdata.ts000066400000000000000000000025551414202165000152450ustar00rootroot00000000000000import { test } from "./testutil"; test({ name: "cdata", xml: "", expect: [ ["opentagstart", { name: "r", attributes: {} }], ["opentag", { name: "r", attributes: {}, isSelfClosing: false }], ["cdata", " this is character data  "], ["cdata", ""], ["closetag", { name: "r", attributes: {}, isSelfClosing: false }], ], }); test({ name: "cdata end in attribute", expect: [ ["opentagstart", { name: "r", attributes: {} }], ["attribute", { name: "foo", value: "]]>" }], ["opentag", { name: "r", attributes: { foo: "]]>", }, isSelfClosing: true, }], ["closetag", { name: "r", attributes: { foo: "]]>", }, isSelfClosing: true, }], ], xml: "", }); test({ name: "surrounded by whitespace", expect: [ ["opentagstart", { name: "content:encoded", attributes: {} }], ["opentag", { name: "content:encoded", attributes: {}, isSelfClosing: false, }], ["text", "\n "], ["cdata", "spacetime is four dimensional"], ["text", "\n "], ["closetag", { name: "content:encoded", attributes: {}, isSelfClosing: false, }], ], xml: ` `, }); saxes-6.0.0/test/close-without-open.ts000066400000000000000000000004461414202165000177330ustar00rootroot00000000000000import { test } from "./testutil"; test({ name: "close a tag that was not opened", xml: "
", expect: [ ["error", "1:7: unmatched closing tag: root."], ["error", "1:7: document must contain a root element."], ["text", "
"], ], opt: { xmlns: true, }, }); saxes-6.0.0/test/comment.ts000066400000000000000000000005451414202165000156300ustar00rootroot00000000000000import { test } from "./testutil"; test({ name: "comment", xml: "", expect: [ ["opentagstart", { name: "r", attributes: {} }], ["opentag", { name: "r", attributes: {}, isSelfClosing: false }], ["comment", "foo"], ["comment", ""], ["closetag", { name: "r", attributes: {}, isSelfClosing: false }], ], }); saxes-6.0.0/test/conformance-candidates.ts000066400000000000000000000022761414202165000205600ustar00rootroot00000000000000import { test } from "./testutil"; // These are tests that are candidates to be added to the XML conformance suite, // after confirmation that they really plug a hole in the suite. test({ name: "bad pi target starting character", // The first character of the processing instruction is wrong. Testing the // first character matters because the restrictions on this character are more // stringent than on later characters of the name. Code writers are liable to // forget that the first character needs special treatment. xml: "", expect: [ ["error", "1:3: disallowed character in processing instruction name."], ["processinginstruction", { target: "-abcde", body: "" }], ["opentagstart", { name: "root", attributes: {}, ns: {} }], [ "opentag", { name: "root", prefix: "", local: "root", uri: "", attributes: {}, ns: {}, isSelfClosing: true, }, ], [ "closetag", { name: "root", prefix: "", local: "root", uri: "", attributes: {}, ns: {}, isSelfClosing: true, }, ], ], opt: { xmlns: true, }, }); saxes-6.0.0/test/conformance.ts000066400000000000000000000227741414202165000164700ustar00rootroot00000000000000import { BaseDriver } from "@xml-conformance-suite/js/drivers/base"; import { ResourceLoader } from "@xml-conformance-suite/js/resource-loader"; import { TestHandling } from "@xml-conformance-suite/js/selection"; import { BaseSelection } from "@xml-conformance-suite/js/selections/base"; import { loadTests } from "@xml-conformance-suite/js/test-parser"; import { TestSpec } from "@xml-conformance-suite/js/test-spec"; import { Test } from "@xml-conformance-suite/js/test-suite"; import { build } from "@xml-conformance-suite/mocha/builders/basic"; import { SaxesParser } from "../build/dist/saxes"; // // ENTITIES: this test requires parsing ENTITY declrations in DTDs, // which we don't support yet. // // DTD: this test requires reporting wf errors in a DTD, which we // don't support yet. // const SKIP: Record = { "not-wf-sa-056": "DTD", "not-wf-sa-078": "DTD", "not-wf-sa-079": "DTD", "not-wf-sa-080": "DTD", "not-wf-sa-084": "DTD", "not-wf-sa-113": "DTD", "not-wf-sa-114": "DTD", "not-wf-sa-121": "DTD", "not-wf-sa-128": "DTD", "not-wf-sa-149": "DTD", "not-wf-sa-160": "ENTITIES", "not-wf-sa-161": "ENTITIES", "not-wf-sa-162": "ENTITIES", "not-wf-sa-180": "ENTITIES", "valid-sa-023": "ENTITIES", "valid-sa-024": "ENTITIES", "valid-sa-053": "ENTITIES", "valid-sa-066": "ENTITIES", "valid-sa-085": "ENTITIES", "valid-sa-089": "ENTITIES", "valid-sa-108": "ENTITIES", "valid-sa-110": "ENTITIES", "valid-sa-114": "ENTITIES", "valid-sa-115": "ENTITIES", "sa02": "DTD", "pi": "DTD", "o-p43pass1": "ENTITIES", "o-p68pass1": "ENTITIES", "o-p09fail3": "DTD", "o-p12fail1": "DTD", "o-p12fail2": "DTD", "o-p12fail3": "DTD", "o-p12fail4": "DTD", "o-p12fail5": "DTD", "o-p12fail6": "DTD", "o-p12fail7": "DTD", "o-p29fail1": "DTD", "o-p69fail1": "DTD", "o-p69fail2": "DTD", "o-p69fail3": "DTD", "ibm-not-wf-P28-ibm28n01.xml": "DTD", "ibm-not-wf-P28-ibm28n02.xml": "DTD", "ibm-not-wf-P28-ibm28n03.xml": "DTD", "ibm-not-wf-P28-ibm28n04.xml": "DTD", "ibm-not-wf-P28-ibm28n05.xml": "DTD", "ibm-not-wf-P28-ibm28n06.xml": "DTD", "ibm-not-wf-P29-ibm29n01.xml": "DTD", "ibm-not-wf-P29-ibm29n02.xml": "DTD", "ibm-not-wf-P29-ibm29n03.xml": "DTD", "ibm-not-wf-P29-ibm29n04.xml": "DTD", "ibm-not-wf-P29-ibm29n05.xml": "DTD", "ibm-not-wf-P29-ibm29n06.xml": "DTD", "ibm-not-wf-P29-ibm29n07.xml": "DTD", "ibm-not-wf-P66-ibm66n01.xml": "DTD", "ibm-not-wf-P66-ibm66n03.xml": "DTD", "ibm-not-wf-P66-ibm66n05.xml": "DTD", "ibm-not-wf-P66-ibm66n07.xml": "DTD", "ibm-not-wf-P66-ibm66n09.xml": "DTD", "ibm-not-wf-P66-ibm66n11.xml": "DTD", "ibm-not-wf-P68-ibm68n07.xml": "DTD", "ibm-not-wf-P69-ibm69n01.xml": "DTD", "ibm-not-wf-P69-ibm69n02.xml": "DTD", "ibm-not-wf-P69-ibm69n03.xml": "DTD", "ibm-not-wf-P69-ibm69n04.xml": "DTD", "ibm-not-wf-P69-ibm69n05.xml": "DTD", "ibm-not-wf-P69-ibm69n06.xml": "DTD", "ibm-not-wf-P69-ibm69n07.xml": "DTD", "ibm-not-wf-P82-ibm82n03.xml": "DTD", "ibm-not-wf-P85-ibm85n01.xml": "DTD", "ibm-not-wf-P85-ibm85n02.xml": "DTD", "ibm-not-wf-P88-ibm88n01.xml": "DTD", "ibm-not-wf-P88-ibm88n02.xml": "DTD", "ibm-not-wf-P89-ibm89n01.xml": "DTD", "ibm-not-wf-P89-ibm89n02.xml": "DTD", "ibm-valid-P09-ibm09v01.xml": "ENTITIES", "ibm-valid-P09-ibm09v02.xml": "ENTITIES", "ibm-valid-P09-ibm09v04.xml": "ENTITIES", "ibm-valid-P10-ibm10v01.xml": "ENTITIES", "ibm-valid-P10-ibm10v02.xml": "ENTITIES", "ibm-valid-P10-ibm10v03.xml": "ENTITIES", "ibm-valid-P10-ibm10v04.xml": "ENTITIES", "ibm-valid-P10-ibm10v05.xml": "ENTITIES", "ibm-valid-P10-ibm10v06.xml": "ENTITIES", "ibm-valid-P10-ibm10v07.xml": "ENTITIES", "ibm-valid-P10-ibm10v08.xml": "ENTITIES", "ibm-valid-P29-ibm29v01.xml": "ENTITIES", "ibm-valid-P43-ibm43v01.xml": "ENTITIES", "ibm-valid-P67-ibm67v01.xml": "ENTITIES", "ibm-1-1-not-wf-P77-ibm77n14.xml": "DTD", "ibm-1-1-valid-P02-ibm02v04.xml": "ENTITIES", "ibm-1-1-valid-P03-ibm03v05.xml": "ENTITIES", "ibm-1-1-valid-P03-ibm03v06.xml": "ENTITIES", "ibm-1-1-valid-P03-ibm03v07.xml": "ENTITIES", "rmt-e2e-15e": "ENTITIES", "rmt-e2e-15f": "ENTITIES", "rmt-ns10-043": "DTD", "rmt-ns10-044": "DTD", "rmt-e3e-06i": "DTD", "rmt-e3e-12": "DTD", }; // // This table was adapted from the chrome.js selection in xml-conformance-suite // // Most likely platform issues (i.e. issues outside the XML parser itself but // with the JavaScript runtime, either due to the ES standard or the runtime's // own quirks): // // - surrogate encoding: // // V8 goes off the rails when it encounters a surrogate outside a pair. There // does not appear to be a workaround. // // - unicode garbage-in garbage-out: // // V8 passes garbage upon encountering bad unicode instead of throwing a // runtime error. (Python throws.) // // - xml declaration encoding: // // By the time the parser sees the document, it cannot know what the original // encoding was. It may have been UTF16, which was converted correctly to an // internal format. // // These are genuine parser errors: // // - ignores wf errors in DOCTYPE: // // Even non-validating parsers must report wellformedness errors in DOCTYPE. // const PLATFORM_ISSUES: Record = { "not-wf-sa-168": "surrogate encoding", "not-wf-sa-169": "surrogate encoding", "not-wf-sa-170": "unicode garbage-in garbage-out", "ibm-not-wf-P02-ibm02n30.xml": "surrogate encoding", "ibm-not-wf-P02-ibm02n31.xml": "surrogate encoding", "rmt-e2e-27": "surrogate encoding", "rmt-e2e-50": "xml declaration encoding", "rmt-e2e-61": "xml declaration encoding", "rmt-011": "xml declarations encoding", "rmt-034": "xml declarations encoding", "rmt-035": "xml declarations encoding", "rmt-041": "xml declarations encoding", "rmt-050": "xml declarations encoding", "rmt-051": "xml declarations encoding", "rmt-054": "xml declarations encoding", "x-ibm-1-0.5-not-wf-P04-ibm04n21.xml": "surrogate encoding", "x-ibm-1-0.5-not-wf-P04-ibm04n22.xml": "surrogate encoding", "x-ibm-1-0.5-not-wf-P04-ibm04n23.xml": "surrogate encoding", "x-ibm-1-0.5-not-wf-P04-ibm04n24.xml": "surrogate encoding", "x-ibm-1-0.5-not-wf-P04a-ibm04an21.xml": "surrogate encoding", "x-ibm-1-0.5-not-wf-P04a-ibm04an22.xml": "surrogate encoding", "x-ibm-1-0.5-not-wf-P04a-ibm04an23.xml": "surrogate encoding", "x-ibm-1-0.5-not-wf-P04a-ibm04an24.xml": "surrogate encoding", "ibm-1-1-not-wf-P02-ibm02n67.xml": "surrogate encoding", "ibm-1-1-not-wf-P04-ibm04n21.xml": "surrogate encoding", "ibm-1-1-not-wf-P04-ibm04n22.xml": "surrogate encoding", "ibm-1-1-not-wf-P04-ibm04n23.xml": "surrogate encoding", "ibm-1-1-not-wf-P04-ibm04n24.xml": "surrogate encoding", "ibm-1-1-not-wf-P04a-ibm04an21.xml": "surrogate encoding", "ibm-1-1-not-wf-P04a-ibm04an22.xml": "surrogate encoding", "ibm-1-1-not-wf-P04a-ibm04an23.xml": "surrogate encoding", "ibm-1-1-not-wf-P04a-ibm04an24.xml": "surrogate encoding", "hst-lhs-007": "xml declaration encoding", }; class SaxesSelection extends BaseSelection { // eslint-disable-next-line class-methods-use-this getHandlingByType(test: TestSpec): TestHandling { const { testType } = test; switch (testType) { case "not-wf": return "fails"; case "valid": return "succeeds"; case "invalid": case "error": return "skip"; default: throw new Error(`unexpected test type: ${testType as string}`); } } // eslint-disable-next-line class-methods-use-this async shouldSkipTest(test: TestSpec): Promise { return (SKIP[test.id] !== undefined) || (PLATFORM_ISSUES[test.id] !== undefined) || // These sections are excluded because they require // parsing DTDs. test.includesSections(["3.2", "3.2.1", "3.2.2", "3.3", "3.3.1", "3.3.2", "4.2", "4.2.2", "4.5", "4.7"]) || test.includesProductions(["[12]", "[13]", "[69]"]) || !((test.includesVersion("1.0") && test.includesEdition("5")) || test.includesEdition("1.1")) ? true : // The tests that use BOM rely on the parser being able to look at // the *raw* data, without decoding. There does not seem to be a way // to do this. test.getHasBOM(); } } class SaxesDriver extends BaseDriver { constructor(private readonly resourceLoader: ResourceLoader) { super("saxes"); } // eslint-disable-next-line class-methods-use-this writeSource(parser: SaxesParser, source: string): void { parser.write(source); parser.close(); } async run(test: Test, handling: TestHandling): Promise { const { resolvedURI } = test; const source = await this.resourceLoader.loadFile(resolvedURI); const errors = []; const parser = new SaxesParser({ xmlns: !test.forbidsNamespaces, }); parser.on("error", (err: Error) => { if (process?.env?.DEBUG !== undefined) { console.log(err); } errors.push(err); }); this.writeSource(parser, source); this.processResult(test, handling, errors.length === 0); } } class CharByCharDriver extends SaxesDriver { // eslint-disable-next-line class-methods-use-this writeSource(parser: SaxesParser, source: string): void { for (const x of source) { parser.write(x); } parser.close(); } } const resourceLoader = new ResourceLoader(); void loadTests(resourceLoader) .then(suite => Promise.all([ build(suite, "conformance (one write)", resourceLoader, SaxesDriver, SaxesSelection), build(suite, "conformance (char-by-char)", resourceLoader, CharByCharDriver, SaxesSelection), ])) .then(run) .catch(e => console.log(e)); saxes-6.0.0/test/cyrillic.ts000066400000000000000000000005171414202165000157770ustar00rootroot00000000000000import { test } from "./testutil"; test({ name: "cyrillic", xml: "<Р>тест", expect: [ ["opentagstart", { name: "Р", attributes: {} }], ["opentag", { name: "Р", attributes: {}, isSelfClosing: false }], ["text", "тест"], ["closetag", { name: "Р", attributes: {}, isSelfClosing: false }], ], }); saxes-6.0.0/test/dtd.ts000066400000000000000000000037061414202165000147430ustar00rootroot00000000000000import { test } from "./testutil"; describe("dtd", () => { test({ name: "DTD with comment containing a quote", xml: `\ ]> `, expect: [ [ "xmldecl", { encoding: "UTF-8", version: "1.0", standalone: undefined, }, ], ["text", "\n"], ["doctype", ` root [ ]`], ["text", "\n"], ["opentagstart", { name: "root", attributes: {} }], ["opentag", { name: "root", attributes: {}, isSelfClosing: true }], ["closetag", { name: "root", attributes: {}, isSelfClosing: true }], ], }); test({ name: "DTD with processing instruction containing a quote", xml: `\ ]> `, expect: [ [ "xmldecl", { encoding: "UTF-8", version: "1.0", standalone: undefined, }, ], ["text", "\n"], ["doctype", ` root [ ]`], ["text", "\n"], ["opentagstart", { name: "root", attributes: {} }], ["opentag", { name: "root", attributes: {}, isSelfClosing: true }], ["closetag", { name: "root", attributes: {}, isSelfClosing: true }], ], }); test({ name: "DTD with ]> in a string", xml: `\ "> ]> `, expect: [ [ "xmldecl", { encoding: "UTF-8", version: "1.0", standalone: undefined, }, ], ["text", "\n"], ["doctype", ` root [ "> ]`], ["text", "\n"], ["opentagstart", { name: "root", attributes: {} }], ["opentag", { name: "root", attributes: {}, isSelfClosing: true }], ["closetag", { name: "root", attributes: {}, isSelfClosing: true }], ], }); }); saxes-6.0.0/test/duplicate-attribute.ts000066400000000000000000000011271414202165000201360ustar00rootroot00000000000000import { test } from "./testutil"; test({ name: "duplicate attribute", xml: "", expect: [ ["opentagstart", { name: "span", attributes: {}, }], ["attribute", { name: "id", value: "hello" }], ["attribute", { name: "id", value: "there" }], ["error", "1:28: duplicate attribute: id."], ["opentag", { name: "span", attributes: { id: "there" }, isSelfClosing: false, }], ["closetag", { name: "span", attributes: { id: "there" }, isSelfClosing: false, }], ], opt: {}, }); saxes-6.0.0/test/emoji.ts000066400000000000000000000006231414202165000152660ustar00rootroot00000000000000import { test } from "./testutil"; // split high-order numeric attributes into surrogate pairs test({ name: "emoji", xml: "🔥", expect: [ ["opentagstart", { name: "a", attributes: {} }], ["opentag", { name: "a", attributes: {}, isSelfClosing: false }], ["text", "\ud83d\udd25"], ["closetag", { name: "a", attributes: {}, isSelfClosing: false }], ], opt: {}, }); saxes-6.0.0/test/entities.ts000066400000000000000000000013011414202165000160010ustar00rootroot00000000000000import { execFile as _execFile } from "child_process"; import * as util from "util"; import { test } from "./testutil"; const execFile = util.promisify(_execFile); test({ name: "entities", xml: "& < > >", expect: [ ["opentagstart", { name: "r", attributes: {} }], ["opentag", { name: "r", attributes: {}, isSelfClosing: false }], ["text", "& < > >"], ["closetag", { name: "r", attributes: {}, isSelfClosing: false }], ], }); // This test mainly exists to check parsing speed of a file with a lot of // entities. it("mass entities", async () => { await execFile("node", ["./examples/null-parser.js", "test/files/entities.xml"]); }); saxes-6.0.0/test/entity-nan.ts000066400000000000000000000005731414202165000162550ustar00rootroot00000000000000import { test } from "./testutil"; test({ name: "entity NaN", xml: "&#NaN;", expect: [ ["opentagstart", { name: "r", attributes: {} }], ["opentag", { name: "r", attributes: {}, isSelfClosing: false }], ["error", "1:9: malformed character entity."], ["text", "&#NaN;"], ["closetag", { name: "r", attributes: {}, isSelfClosing: false }], ], }); saxes-6.0.0/test/eol-handling.ts000066400000000000000000000157571414202165000165420ustar00rootroot00000000000000import { SaxesParser } from "../build/dist/saxes"; import { test } from "./testutil"; describe("eol handling", () => { describe("mixed", () => { /* eslint-disable linebreak-style */ const xml = `\ abc def ghi xx xx `; /* eslint-enable linebreak-style */ const expect = [ [ "xmldecl", { encoding: "utf-8", version: "1.0", standalone: undefined, }, ], ["text", "\n\n"], ["opentagstart", { name: "moo", attributes: {} }], ["attribute", { name: "a", value: "12 3", }], ["opentag", { name: "moo", attributes: { a: "12 3", }, isSelfClosing: false, }], ["text", "\n abc\n def\r\n ghi\n\n xx\nxx\n"], ["closetag", { name: "moo", attributes: { a: "12 3", }, isSelfClosing: false, }], ["text", "\n"], ]; test({ name: "one chunk", xml, expect, }); test({ name: "char-by-char", expect, fn(parser: SaxesParser): void { for (const x of xml) { parser.write(x); } parser.close(); }, }); }); // The comprehensive test is meant to have EOL in all possible contexts. describe("comprehensive", () => { const nl = `\ " > ]> abc `; const xmlDeclEnd = nl.indexOf("?>"); const expect = [ [ "xmldecl", { encoding: "utf-8", version: "1.0", standalone: "no", }, ], ["text", "\n"], ["doctype", ` root [ " > ]`], ["text", "\n"], ["comment", "\n"], ["text", "\n"], ["processinginstruction", { target: "fnord", body: "" }], ["text", "\n"], ["opentagstart", { name: "moo", attributes: {} }], ["attribute", { name: "a", value: "12 3", }], ["attribute", { name: "b", value: " z ", }], ["opentag", { name: "moo", attributes: { a: "12 3", b: " z ", }, isSelfClosing: false, }], ["text", ` abc \r `], ["comment", "\n"], ["text", "\n"], ["processinginstruction", { target: "fnord", body: "" }], ["text", "\n"], ["opentagstart", { name: "abc", attributes: {} }], ["attribute", { name: "a", value: "bc", }], ["opentag", { name: "abc", attributes: { a: "bc", }, isSelfClosing: true, }], ["closetag", { name: "abc", attributes: { a: "bc", }, isSelfClosing: true, }], ["text", "\n"], ["closetag", { name: "moo", attributes: { a: "12 3", b: " z ", }, isSelfClosing: false, }], ["text", "\n"], ] as const; const fixed11 = expect.map(x => (x[0] === "xmldecl" ? [x[0], { ...x[1], version: "1.1" }] : x)); describe("nl", () => { test({ name: "one chunk", xml: nl, expect, }); test({ name: "char-by-char", expect, fn(parser: SaxesParser): void { for (const x of nl) { parser.write(x); } parser.close(); }, }); }); describe("cr", () => { const cr = nl.replace(/\n/g, "\r"); test({ name: "one chunk", xml: cr, expect, }); test({ name: "char-by-char", expect, fn(parser: SaxesParser): void { for (const x of cr) { parser.write(x); } parser.close(); }, }); }); describe("crnl", () => { const crnl = nl.replace(/\n/g, "\r\n"); test({ name: "one chunk", xml: crnl, expect, }); test({ name: "char-by-char", expect, fn(parser: SaxesParser): void { for (const x of crnl) { parser.write(x); } parser.close(); }, }); }); describe("nel", () => { // We have to switch the EOL characters after the XML declaration. const nel = nl.slice(0, xmlDeclEnd).replace("1.0", "1.1") + nl.slice(xmlDeclEnd).replace(/\n/g, "\u0085"); test({ name: "one chunk", xml: nel, expect: fixed11, }); test({ name: "char-by-char", expect: fixed11, fn(parser: SaxesParser): void { for (const x of nel) { parser.write(x); } parser.close(); }, }); }); describe("ls", () => { // We have to switch the EOL characters after the XML declaration. const ls = nl.slice(0, xmlDeclEnd).replace("1.0", "1.1") + nl.slice(xmlDeclEnd).replace(/\n/g, "\u2028"); test({ name: "one chunk", xml: ls, expect: fixed11, }); test({ name: "char-by-char", expect: fixed11, fn(parser: SaxesParser): void { for (const x of ls) { parser.write(x); } parser.close(); }, }); }); }); describe("bad start", () => { const xml = ` `; const expect = [ [ "error", "2:6: an XML declaration must be at the start of the document.", ], [ "xmldecl", { encoding: "utf-8", version: "1.0", standalone: undefined, }, ], ["opentagstart", { name: "doc", attributes: {}, }], ["opentag", { name: "doc", attributes: {}, isSelfClosing: true, }], ["closetag", { name: "doc", attributes: {}, isSelfClosing: true, }], ]; describe("with nl as eol", () => { test({ name: "one chunk", xml, expect, }); test({ name: "char-by-char", expect, fn(parser: SaxesParser): void { for (const x of xml) { parser.write(x); } parser.close(); }, }); }); describe("with crnl as eol", () => { const crnl = xml.replace(/\n/g, "\r\n"); test({ name: "one chunk", xml: crnl, expect, }); test({ name: "char-by-char", expect, fn(parser: SaxesParser): void { for (const x of crnl) { parser.write(x); } parser.close(); }, }); }); }); }); saxes-6.0.0/test/errors.ts000066400000000000000000000023171414202165000155010ustar00rootroot00000000000000import { test } from "./testutil"; test({ name: "without fileName", xml: "", expect: [ ["opentagstart", { name: "doc", attributes: {} }], ["opentag", { name: "doc", isSelfClosing: false, attributes: {} }], ["error", "1:5: unclosed tag: doc"], ], opt: {}, }); test({ name: "without fileName, when not tracking position position", xml: "", expect: [ ["opentagstart", { name: "doc", attributes: {} }], ["opentag", { name: "doc", isSelfClosing: false, attributes: {} }], ["error", "unclosed tag: doc"], ], opt: { position: false, }, }); test({ name: "with fileName", xml: "", expect: [ ["opentagstart", { name: "doc", attributes: {} }], ["opentag", { name: "doc", isSelfClosing: false, attributes: {} }], ["error", "foobar.xml:1:5: unclosed tag: doc"], ], opt: { fileName: "foobar.xml", }, }); test({ name: "with fileName, when not tracking position position", xml: "", expect: [ ["opentagstart", { name: "doc", attributes: {} }], ["opentag", { name: "doc", isSelfClosing: false, attributes: {} }], ["error", "foobar.xml: unclosed tag: doc"], ], opt: { fileName: "foobar.xml", position: false, }, }); saxes-6.0.0/test/files/000077500000000000000000000000001414202165000147145ustar00rootroot00000000000000saxes-6.0.0/test/files/entities.xml000066400000000000000000030676031414202165000173010ustar00rootroot00000000000000 < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " < > " " saxes-6.0.0/test/fragments.ts000066400000000000000000000130061414202165000161500ustar00rootroot00000000000000import { test } from "./testutil"; describe("fragments", () => { test({ name: "empty", xml: "", expect: [], opt: { xmlns: true, fragment: true, }, }); test({ name: "text only", xml: " Something ", expect: [ ["text", " Something "], ], opt: { xmlns: true, fragment: true, }, }); test({ name: "text and elements", xml: "Something blah something", expect: [ ["text", "Something "], ["opentagstart", { name: "blah", attributes: {}, ns: {}, }], ["opentag", { name: "blah", local: "blah", prefix: "", uri: "", attributes: {}, ns: {}, isSelfClosing: false, }], ["opentagstart", { name: "more", attributes: {}, ns: {}, }], ["opentag", { name: "more", local: "more", prefix: "", uri: "", attributes: {}, ns: {}, isSelfClosing: false, }], ["text", "blah"], ["closetag", { name: "more", local: "more", prefix: "", uri: "", attributes: {}, ns: {}, isSelfClosing: false, }], ["closetag", { name: "blah", local: "blah", prefix: "", uri: "", attributes: {}, ns: {}, isSelfClosing: false, }], ["text", " something"], ], opt: { xmlns: true, fragment: true, }, }); test({ name: "two top-level elements", xml: "Something 12 something", expect: [ ["text", "Something "], ["opentagstart", { name: "blah", attributes: {}, ns: {}, }], ["opentag", { name: "blah", local: "blah", prefix: "", uri: "", attributes: {}, ns: {}, isSelfClosing: false, }], ["text", "1"], ["closetag", { name: "blah", local: "blah", prefix: "", uri: "", attributes: {}, ns: {}, isSelfClosing: false, }], ["opentagstart", { name: "more", attributes: {}, ns: {}, }], ["opentag", { name: "more", local: "more", prefix: "", uri: "", attributes: {}, ns: {}, isSelfClosing: false, }], ["text", "2"], ["closetag", { name: "more", local: "more", prefix: "", uri: "", attributes: {}, ns: {}, isSelfClosing: false, }], ["text", " something"], ], opt: { xmlns: true, fragment: true, }, }); // This case was added to check for a bug in the parsing logic that prevented // detecting if an element was not closed. test({ name: "unclosed tag", xml: "Something 12", expect: [ ["text", "Something "], ["opentagstart", { name: "blah", attributes: {}, ns: {}, }], ["opentag", { name: "blah", local: "blah", prefix: "", uri: "", attributes: {}, ns: {}, isSelfClosing: false, }], ["text", "1"], ["closetag", { name: "blah", local: "blah", prefix: "", uri: "", attributes: {}, ns: {}, isSelfClosing: false, }], ["opentagstart", { name: "more", attributes: {}, ns: {}, }], ["opentag", { name: "more", local: "more", prefix: "", uri: "", attributes: {}, ns: {}, isSelfClosing: false, }], ["error", "1:31: unclosed tag: more"], ["text", "2"], ], opt: { xmlns: true, fragment: true, }, }); test({ name: "namespaces", xml: "Something 1 something", expect: [ ["text", "Something "], ["opentagstart", { name: "foo:blah", attributes: {}, ns: {}, }], ["opentag", { name: "foo:blah", local: "blah", prefix: "foo", uri: "foo-uri", attributes: {}, ns: {}, isSelfClosing: false, }], ["text", "1"], ["closetag", { name: "foo:blah", local: "blah", prefix: "foo", uri: "foo-uri", attributes: {}, ns: {}, isSelfClosing: false, }], ["text", " something"], ], opt: { xmlns: true, fragment: true, additionalNamespaces: { foo: "foo-uri", }, }, }); test({ name: "resolvePrefix", xml: "Something 1 something", expect: [ ["text", "Something "], ["opentagstart", { name: "foo:blah", attributes: {}, ns: {}, }], ["opentag", { name: "foo:blah", local: "blah", prefix: "foo", uri: "foo-uri", attributes: {}, ns: {}, isSelfClosing: false, }], ["text", "1"], ["closetag", { name: "foo:blah", local: "blah", prefix: "foo", uri: "foo-uri", attributes: {}, ns: {}, isSelfClosing: false, }], ["text", " something"], ], opt: { xmlns: true, fragment: true, resolvePrefix: (prefix: string): string | undefined => ({ foo: "foo-uri", } as Record)[prefix], }, }); }); saxes-6.0.0/test/issue-23.ts000066400000000000000000000043351414202165000155410ustar00rootroot00000000000000import { test } from "./testutil"; test({ name: "issue 23", xml: "" + "" + "653724009" + "-1" + "01pG0000002KoSUIA0" + "-1" + "CalendarController" + "true" + "" + "", expect: [ ["opentagstart", { name: "compileClassesResponse", attributes: {} }], ["opentag", { name: "compileClassesResponse", attributes: {}, isSelfClosing: false }], ["opentagstart", { name: "result", attributes: {} }], ["opentag", { name: "result", attributes: {}, isSelfClosing: false }], ["opentagstart", { name: "bodyCrc", attributes: {} }], ["opentag", { name: "bodyCrc", attributes: {}, isSelfClosing: false }], ["text", "653724009"], ["closetag", { name: "bodyCrc", attributes: {}, isSelfClosing: false }], ["opentagstart", { name: "column", attributes: {} }], ["opentag", { name: "column", attributes: {}, isSelfClosing: false }], ["text", "-1"], ["closetag", { name: "column", attributes: {}, isSelfClosing: false }], ["opentagstart", { name: "id", attributes: {} }], ["opentag", { name: "id", attributes: {}, isSelfClosing: false }], ["text", "01pG0000002KoSUIA0"], ["closetag", { name: "id", attributes: {}, isSelfClosing: false }], ["opentagstart", { name: "line", attributes: {} }], ["opentag", { name: "line", attributes: {}, isSelfClosing: false }], ["text", "-1"], ["closetag", { name: "line", attributes: {}, isSelfClosing: false }], ["opentagstart", { name: "name", attributes: {} }], ["opentag", { name: "name", attributes: {}, isSelfClosing: false }], ["text", "CalendarController"], ["closetag", { name: "name", attributes: {}, isSelfClosing: false }], ["opentagstart", { name: "success", attributes: {} }], ["opentag", { name: "success", attributes: {}, isSelfClosing: false }], ["text", "true"], ["closetag", { name: "success", attributes: {}, isSelfClosing: false }], ["closetag", { name: "result", attributes: {}, isSelfClosing: false }], ["closetag", { name: "compileClassesResponse", attributes: {}, isSelfClosing: false }], ], opt: {}, }); saxes-6.0.0/test/issue-33.ts000066400000000000000000000014611414202165000155370ustar00rootroot00000000000000import { test } from "./testutil"; // https://github.com/isaacs/sax-js/issues/33 test({ name: "issue 33 (comment with single dash)", xml: "\n" + "\n" + "\n" + "", expect: [ ["opentagstart", { name: "xml", attributes: {} }], ["opentag", { name: "xml", attributes: {}, isSelfClosing: false }], ["text", "\n"], ["comment", " \n comment with a single dash- in it\n"], ["text", "\n"], ["opentagstart", { name: "data", attributes: {} }], ["opentag", { name: "data", attributes: {}, isSelfClosing: true }], ["closetag", { name: "data", attributes: {}, isSelfClosing: true }], ["text", "\n"], ["closetag", { name: "xml", attributes: {}, isSelfClosing: false }], ], opt: {}, }); saxes-6.0.0/test/issue-35.ts000066400000000000000000000006631414202165000155440ustar00rootroot00000000000000import { test } from "./testutil"; // https://github.com/isaacs/sax-js/issues/35 test({ name: "issue 35 (leading 0 in entity numeric code)", xml: " \n", expect: [ ["opentagstart", { name: "xml", attributes: {} }], ["opentag", { name: "xml", attributes: {}, isSelfClosing: false }], ["text", "\r\r\n"], ["closetag", { name: "xml", attributes: {}, isSelfClosing: false }], ], opt: {}, }); saxes-6.0.0/test/issue-38.ts000066400000000000000000000007101414202165000155400ustar00rootroot00000000000000import { test } from "./testutil"; test({ name: "issue 38", xml: `\ Fnord '<' and then some. `, expect: [ ["opentag", { name: "top", attributes: {}, isSelfClosing: false }], ["opentag", { name: "x", attributes: {}, isSelfClosing: false }], ["opentag", { name: "x", attributes: { x: "foo" }, isSelfClosing: false }], ], opt: {}, events: ["opentag"], }); saxes-6.0.0/test/issue-47.ts000066400000000000000000000010641414202165000155430ustar00rootroot00000000000000import { test } from "./testutil"; // https://github.com/isaacs/sax-js/issues/47 test({ name: "issue 47", xml: "", expect: [ ["opentagstart", { name: "a", attributes: {} }], ["attribute", { name: "href", value: "query.svc?x=1&y=2&z=3" }], ["opentag", { name: "a", attributes: { href: "query.svc?x=1&y=2&z=3" }, isSelfClosing: true, }], ["closetag", { name: "a", attributes: { href: "query.svc?x=1&y=2&z=3" }, isSelfClosing: true, }], ], opt: {}, }); saxes-6.0.0/test/issue-84.ts000066400000000000000000000010111414202165000155340ustar00rootroot00000000000000import { test } from "./testutil"; // https://github.com/isaacs/sax-js/issues/84 test({ name: "issue 84 (unbalanced quotes in pi)", xml: "body", expect: [ ["opentagstart", { name: "xml", attributes: {} }], ["opentag", { name: "xml", attributes: {}, isSelfClosing: false }], ["processinginstruction", { target: "has", body: "unbalanced \"quotes" }], ["text", "body"], ["closetag", { name: "xml", attributes: {}, isSelfClosing: false }], ], opt: {}, }); saxes-6.0.0/test/issue-86.ts000066400000000000000000000013261414202165000155470ustar00rootroot00000000000000import { test } from "./testutil"; test({ name: "issue 86 (prevent open waka after root has closed)", xml: "abcde { const parser = new SaxesParser(); let seen = false; parser.on("opentag", (node: SaxesTagPlain) => { expect(node).to.deep.equal({ name: "x", attributes: {}, isSelfClosing: false, }); seen = true; }); parser.write(Buffer.from("y")).close(); expect(seen).to.be.true; }); saxes-6.0.0/test/opentagstart.ts000066400000000000000000000037571414202165000167110ustar00rootroot00000000000000import { test } from "./testutil"; describe("openstarttag", () => { test({ name: "good name, xmlns true", xml: "", expect: [ [ "opentagstart", { name: "root", ns: {}, attributes: {}, }, ], [ "attribute", { name: "length", value: "12345", prefix: "", local: "length", }, ], [ "opentag", { name: "root", prefix: "", local: "root", uri: "", attributes: { length: { name: "length", value: "12345", prefix: "", local: "length", uri: "", }, }, ns: {}, isSelfClosing: false, }, ], [ "closetag", { name: "root", prefix: "", local: "root", uri: "", attributes: { length: { name: "length", value: "12345", prefix: "", local: "length", uri: "", }, }, ns: {}, isSelfClosing: false, }, ], ], opt: { xmlns: true, }, }); test({ name: "good name, xmlns false", xml: "", expect: [ [ "opentagstart", { name: "root", attributes: {}, }, ], [ "attribute", { name: "length", value: "12345", }, ], [ "opentag", { name: "root", attributes: { length: "12345", }, isSelfClosing: false, }, ], [ "closetag", { name: "root", attributes: { length: "12345", }, isSelfClosing: false, }, ], ], }); }); saxes-6.0.0/test/parser-position.ts000066400000000000000000000103271414202165000173230ustar00rootroot00000000000000import { expect } from "chai"; import { EVENTS, SaxesOptions, SaxesParser } from "../build/dist/saxes"; import { test } from "./testutil"; interface ExpectedPosition { position?: number; line?: number; column?: number; } type ExpectedEvent = readonly [string, ExpectedPosition, string?]; function testPosition(name: string, chunks: string[], expectedEvents: readonly ExpectedEvent[], options?: SaxesOptions): void { it(name, () => { const parser = new SaxesParser(options); let expectedIx = 0; for (const ev of EVENTS) { // eslint-disable-next-line no-loop-func, @typescript-eslint/no-explicit-any parser.on(ev, (thing: any) => { const [expectedEvent, expectedPosition, expectedText] = expectedEvents[expectedIx++]; expect(expectedEvent).to.equal(ev); // eslint-disable-next-line guard-for-in for (const prop in expectedPosition) { // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access expect((parser as any)[prop], `bad ${prop}`) .to.deep.equal(expectedPosition[prop as keyof ExpectedPosition]); } if (expectedEvent === "text" && expectedText !== undefined) { expect(thing).to.equal(expectedText); } }); } for (const chunk of chunks) { parser.write(chunk); } }); } describe("parser position", () => { testPosition( "with single chunk", ["
abcdefgh
"], [ ["opentagstart", { position: 5 }], ["opentag", { position: 5 }], ["text", { position: 14 }], ["closetag", { position: 19 }], ]); testPosition( "with multiple chunks", ["
abcde", "fgh
"], [ ["opentagstart", { position: 5 }], ["opentag", { position: 5 }], ["text", { position: 14 }], ["closetag", { position: 19 }], ]); const newlines = "
abcde\r\nf\rgh\r\ri\u0085j\u2028k
"; const trailingCr: string[] = []; for (const x of newlines.split("\r")) { trailingCr.push(x, "\r"); } const oneByOne = newlines.split(""); describe("XML 1.0", () => { const expected = [ ["opentagstart", { position: 5, line: 1, column: 5 }], ["opentag", { position: 5, line: 1, column: 5 }], ["text", { position: 13, line: 2, column: 1 }, "abcde\n"], ["opentagstart", { position: 17, line: 2, column: 5 }], ["opentag", { position: 18, line: 2, column: 6 }], ["closetag", { position: 18, line: 2, column: 6 }], ["text", { position: 30, line: 5, column: 6 }, "f\ngh\n\ni\u0085j\u2028k"], ["closetag", { position: 35, line: 5, column: 11 }], ] as const; testPosition("with various newlines", [newlines], expected); testPosition("with various newlines (one-by-one)", oneByOne, expected); testPosition("trailing CR", trailingCr, expected); }); describe("XML 1.1", () => { const expected = [ ["opentagstart", { position: 5, line: 1, column: 5 }], ["opentag", { position: 5, line: 1, column: 5 }], ["text", { position: 13, line: 2, column: 1 }, "abcde\n"], ["opentagstart", { position: 17, line: 2, column: 5 }], ["opentag", { position: 18, line: 2, column: 6 }], ["closetag", { position: 18, line: 2, column: 6 }], ["text", { position: 30, line: 7, column: 2 }, "f\ngh\n\ni\nj\nk"], ["closetag", { position: 35, line: 7, column: 7 }], ] as const; testPosition("with various newlines", [newlines], expected, { defaultXMLVersion: "1.1", }); testPosition("with various newlines (one-by-one)", oneByOne, expected, { defaultXMLVersion: "1.1", }); testPosition("trailing CR", trailingCr, expected, { defaultXMLVersion: "1.1", }); }); testPosition("astral plane", ["
💩"], [ ["opentagstart", { position: 3, line: 1, column: 3 }], ["opentag", { position: 3, line: 1, column: 3 }], ["text", { position: 6, line: 1, column: 5 }], ["closetag", { position: 9, line: 1, column: 8 }], ]); test({ name: "empty document", xml: "", expect: [ ["error", "fnord.xml:1:0: document must contain a root element."], ], opt: { fileName: "fnord.xml", }, }); }); saxes-6.0.0/test/pi.ts000066400000000000000000000014471414202165000146000ustar00rootroot00000000000000import { test } from "./testutil"; describe("processing instructions", () => { test({ name: "with well-formed name", xml: "", expect: [ ["processinginstruction", { target: "xml-stylesheet", body: "version='1.0'", }], ["opentagstart", { name: "foo", attributes: {}, ns: {}, }], ["opentag", { name: "foo", local: "foo", prefix: "", uri: "", attributes: {}, ns: {}, isSelfClosing: true, }], ["closetag", { name: "foo", local: "foo", prefix: "", uri: "", attributes: {}, ns: {}, isSelfClosing: true, }], ], opt: { xmlns: true, }, }); }); saxes-6.0.0/test/self-closing-child.ts000066400000000000000000000025431414202165000176340ustar00rootroot00000000000000import { test } from "./testutil"; test({ name: "self-closing child", xml: "" + "" + "" + "" + "" + "=(|)" + "" + "", expect: [ ["opentagstart", { name: "root", attributes: {}, }], ["opentag", { name: "root", attributes: {}, isSelfClosing: false, }], ["opentagstart", { name: "child", attributes: {}, }], ["opentag", { name: "child", attributes: {}, isSelfClosing: false, }], ["opentagstart", { name: "haha", attributes: {}, }], ["opentag", { name: "haha", attributes: {}, isSelfClosing: true, }], ["closetag", { name: "haha", attributes: {}, isSelfClosing: true, }], ["closetag", { name: "child", attributes: {}, isSelfClosing: false, }], ["opentagstart", { name: "monkey", attributes: {}, }], ["opentag", { name: "monkey", attributes: {}, isSelfClosing: false, }], ["text", "=(|)"], ["closetag", { name: "monkey", attributes: {}, isSelfClosing: false, }], ["closetag", { name: "root", attributes: {}, isSelfClosing: false, }], ["end", undefined], ["ready", undefined], ], opt: {}, }); saxes-6.0.0/test/self-closing-tag.ts000066400000000000000000000023201414202165000173150ustar00rootroot00000000000000import { test } from "./testutil"; test({ name: "self-closing tag", xml: " " + " " + " " + " " + "=(|) " + "" + " ", expect: [ ["opentagstart", { name: "root", attributes: {} }], ["opentag", { name: "root", attributes: {}, isSelfClosing: false }], ["text", " "], ["opentagstart", { name: "haha", attributes: {} }], ["opentag", { name: "haha", attributes: {}, isSelfClosing: true }], ["closetag", { name: "haha", attributes: {}, isSelfClosing: true }], ["text", " "], ["opentagstart", { name: "haha", attributes: {} }], ["opentag", { name: "haha", attributes: {}, isSelfClosing: true }], ["closetag", { name: "haha", attributes: {}, isSelfClosing: true }], ["text", " "], // ["opentag", {name:"haha", attributes:{}}], // ["closetag", "haha"], ["opentagstart", { name: "monkey", attributes: {} }], ["opentag", { name: "monkey", attributes: {}, isSelfClosing: false }], ["text", " =(|) "], ["closetag", { name: "monkey", attributes: {}, isSelfClosing: false }], ["closetag", { name: "root", attributes: {}, isSelfClosing: false }], ["text", " "], ], opt: {}, }); saxes-6.0.0/test/testutil.ts000066400000000000000000000034521414202165000160430ustar00rootroot00000000000000import { expect } from "chai"; import { EventName, EVENTS, SaxesOptions, SaxesParser } from "../build/dist/saxes"; export interface TestOptions { xml?: string | readonly string[]; name: string; // eslint-disable-next-line @typescript-eslint/no-explicit-any expect: readonly any[]; // eslint-disable-next-line @typescript-eslint/ban-types fn?: (parser: SaxesParser<{}>) => void; opt?: SaxesOptions; events?: readonly EventName[]; } export function test(options: TestOptions): void { const { xml, name, expect: expected, fn, events } = options; it(name, () => { const parser = new SaxesParser(options.opt); let expectedIx = 0; for (const ev of events ?? EVENTS) { // eslint-disable-next-line @typescript-eslint/no-explicit-any, no-loop-func parser.on(ev, (n: any) => { if (process.env.DEBUG !== undefined) { console.error({ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment expected: expected[expectedIx], actual: [ev, n], }); } if (expectedIx >= expected.length && (ev === "end" || ev === "ready")) { return; } // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access expect([ev, ev === "error" ? n.message : n]).to.deep .equal(expected[expectedIx]); expectedIx++; }); } expect(xml !== undefined || fn !== undefined, "must use xml or fn") .to.be.true; if (xml !== undefined) { if (Array.isArray(xml)) { for (const chunk of xml as readonly string[]) { parser.write(chunk); } parser.close(); } else { parser.write(xml as string).close(); } } fn?.(parser); expect(expectedIx).to.equal(expected.length); }); } saxes-6.0.0/test/trailing-attribute-no-value.ts000066400000000000000000000007701414202165000215240ustar00rootroot00000000000000import { test } from "./testutil"; test({ name: "trailing attribute without value", xml: "", expect: [ ["opentagstart", { name: "root", attributes: {} }], ["error", "1:13: attribute without value."], ["attribute", { name: "attrib", value: "attrib" }], ["opentag", { name: "root", attributes: { attrib: "attrib" }, isSelfClosing: false }], ["closetag", { name: "root", attributes: { attrib: "attrib" }, isSelfClosing: false }], ], opt: {}, }); saxes-6.0.0/test/trailing-non-whitespace.ts000066400000000000000000000011211414202165000207100ustar00rootroot00000000000000import { test } from "./testutil"; test({ name: "trailing non-whitespace text", xml: "Welcome, to monkey land", expect: [ ["opentagstart", { name: "span", attributes: {}, }], ["opentag", { name: "span", attributes: {}, isSelfClosing: false, }], ["text", "Welcome,"], ["closetag", { name: "span", attributes: {}, isSelfClosing: false, }], ["error", "1:36: text data outside of root node."], ["text", " to monkey land"], ["end", undefined], ["ready", undefined], ], opt: {}, }); saxes-6.0.0/test/tsconfig.json000066400000000000000000000003051414202165000163170ustar00rootroot00000000000000{ "extends": "../tsconfig.json", "compilerOptions": { "types": ["mocha", "node"], "declaration": true, "sourceMap": true, "baseUrl": "." }, "include": [ "**/*.ts" ] } saxes-6.0.0/test/tshook.js000066400000000000000000000002031414202165000154520ustar00rootroot00000000000000"use strict"; require("ts-node").register({ project: "test/tsconfig.json", cache: true, cacheDirectory: "test/tscache", }); saxes-6.0.0/test/typings.ts000066400000000000000000000035661414202165000156710ustar00rootroot00000000000000// import { expectType } from "tsd"; // import { SaxesParser, SaxesStartTag, SaxesStartTagNS, SaxesStartTagPlain, // SaxesTag, SaxesTagNS, SaxesTagPlain } from "../build/dist/saxes"; // describe("typings", () => { // describe("of onopentagstart", () => { // it("a parser with xmlns true passes SaxesStartTagNS", () => { // expectType<(tag: SaxesStartTagNS) => void>( // // eslint-disable-next-line @typescript-eslint/unbound-method // new SaxesParser({ xmlns: true }).onopentagstart); // }); // it("a parser with xmlns false is a SaxesParserPlain", () => { // expectType<(tag: SaxesStartTagPlain) => void>( // // eslint-disable-next-line @typescript-eslint/unbound-method // new SaxesParser({ xmlns: false }).onopentagstart); // }); // it("a parser with xmlns unset is a SaxesParser", () => { // expectType<(tag: SaxesStartTag) => void>( // // eslint-disable-next-line @typescript-eslint/unbound-method // new SaxesParser(Object.create(null)).onopentagstart); // }); // }); // describe("of onopentag", () => { // it("a parser with xmlns true passes SaxesStartTagNS", () => { // expectType<(tag: SaxesTagNS) => void>( // // eslint-disable-next-line @typescript-eslint/unbound-method // new SaxesParser({ xmlns: true }).onopentag); // }); // it("a parser with xmlns false is a SaxesParserPlain", () => { // expectType<(tag: SaxesTagPlain) => void>( // // eslint-disable-next-line @typescript-eslint/unbound-method // new SaxesParser({ xmlns: false }).onopentag); // }); // it("a parser with xmlns unset is a SaxesParser", () => { // expectType<(tag: SaxesTag) => void>( // // eslint-disable-next-line @typescript-eslint/unbound-method // new SaxesParser(Object.create(null)).onopentag); // }); // }); // }); saxes-6.0.0/test/unclosed-root.ts000066400000000000000000000006171414202165000167630ustar00rootroot00000000000000import { test } from "./testutil"; test({ name: "unclosed root", xml: "", expect: [ [ "opentagstart", { name: "root", attributes: {}, }, ], [ "opentag", { name: "root", attributes: {}, isSelfClosing: false, }, ], [ "error", "1:6: unclosed tag: root", ], ], opt: {}, }); saxes-6.0.0/test/unicode.ts000066400000000000000000000014171414202165000156130ustar00rootroot00000000000000import { SaxesParser } from "../build/dist/saxes"; import { test } from "./testutil"; describe("unicode test", () => { describe("poop", () => { const xml = "💩"; const expect = [ ["opentagstart", { name: "a", attributes: {} }], ["opentag", { name: "a", attributes: {}, isSelfClosing: false }], ["text", "💩"], ["closetag", { name: "a", attributes: {}, isSelfClosing: false }], ]; test({ name: "intact", xml, expect, }); test({ name: "sliced", fn(parser: SaxesParser): void { // This test purposely slices the string into the poop character. parser.write(xml.slice(0, 4)); parser.write(xml.slice(4)); parser.close(); }, expect, }); }); }); saxes-6.0.0/test/wrong-cdata-closure.ts000066400000000000000000000040551414202165000200460ustar00rootroot00000000000000import { SaxesParser } from "../build/dist/saxes"; import { test } from "./testutil"; const xml = "somethingx]]>moo"; describe("wrong cdata closure", () => { test({ name: "one shot", xml, expect: [ ["opentagstart", { name: "span", attributes: {}, }], ["opentag", { name: "span", attributes: {}, isSelfClosing: false, }], ["error", "1:19: the string \"]]>\" is disallowed in char data."], ["text", "somethingx]]>moo"], ["closetag", { name: "span", attributes: {}, isSelfClosing: false, }], ["end", undefined], ["ready", undefined], ], opt: {}, }); test({ name: "one-by-one", fn(parser: SaxesParser): void { for (const x of xml) { parser.write(x); } parser.close(); }, expect: [ ["opentagstart", { name: "span", attributes: {}, }], ["opentag", { name: "span", attributes: {}, isSelfClosing: false, }], ["error", "1:19: the string \"]]>\" is disallowed in char data."], ["text", "somethingx]]>moo"], ["closetag", { name: "span", attributes: {}, isSelfClosing: false, }], ["end", undefined], ["ready", undefined], ], opt: {}, }); test({ name: "two-by-two", fn(parser: SaxesParser): void { for (let ix = 0; ix < xml.length; ix += 2) { parser.write(xml.slice(ix, ix + 2)); } parser.close(); }, expect: [ ["opentagstart", { name: "span", attributes: {}, }], ["opentag", { name: "span", attributes: {}, isSelfClosing: false, }], ["error", "1:19: the string \"]]>\" is disallowed in char data."], ["text", "somethingx]]>moo"], ["closetag", { name: "span", attributes: {}, isSelfClosing: false, }], ["end", undefined], ["ready", undefined], ], opt: {}, }); }); saxes-6.0.0/test/xml-declaration.ts000066400000000000000000000314101414202165000172440ustar00rootroot00000000000000import { expect } from "chai"; import { SaxesOptions, SaxesParser } from "../build/dist/saxes"; import { test } from "./testutil"; const XML_1_0_DECLARATION = ""; const XML_1_1_DECLARATION = ""; const WELL_FORMED_1_0_NOT_1_1 = "\u007F"; const WELL_FORMED_1_1_NOT_1_0 = ""; type UnforcedExpectation = { version?: "1.0" | "1.1"; expectError: boolean }; type ForcedExpectation = { version: "1.0" | "1.1"; expectError: boolean }; describe("xml declaration", () => { test({ name: "empty declaration", xml: "", expect: [ ["error", "1:7: XML declaration must contain a version."], [ "xmldecl", { encoding: undefined, version: undefined, standalone: undefined, }, ], ["opentagstart", { name: "root", attributes: {}, ns: {} }], [ "opentag", { name: "root", prefix: "", local: "root", uri: "", attributes: {}, ns: {}, isSelfClosing: true, }, ], [ "closetag", { name: "root", prefix: "", local: "root", uri: "", attributes: {}, ns: {}, isSelfClosing: true, }, ], ], opt: { xmlns: true, }, }); test({ name: "version without equal", xml: "", expect: [ ["error", "1:14: XML declaration is incomplete."], [ "xmldecl", { encoding: undefined, version: undefined, standalone: undefined, }, ], ["opentagstart", { name: "root", attributes: {}, ns: {} }], [ "opentag", { name: "root", prefix: "", local: "root", uri: "", attributes: {}, ns: {}, isSelfClosing: true, }, ], [ "closetag", { name: "root", prefix: "", local: "root", uri: "", attributes: {}, ns: {}, isSelfClosing: true, }, ], ], opt: { xmlns: true, }, }); test({ name: "version without value", xml: "", expect: [ ["error", "1:15: XML declaration is incomplete."], [ "xmldecl", { encoding: undefined, version: undefined, standalone: undefined, }, ], ["opentagstart", { name: "root", attributes: {}, ns: {} }], [ "opentag", { name: "root", prefix: "", local: "root", uri: "", attributes: {}, ns: {}, isSelfClosing: true, }, ], [ "closetag", { name: "root", prefix: "", local: "root", uri: "", attributes: {}, ns: {}, isSelfClosing: true, }, ], ], opt: { xmlns: true, }, }); test({ name: "unquoted value", xml: "", expect: [ ["error", "1:15: value must be quoted."], ["error", "1:16: XML declaration is incomplete."], [ "xmldecl", { encoding: undefined, version: undefined, standalone: undefined, }, ], ["opentagstart", { name: "root", attributes: {}, ns: {} }], [ "opentag", { name: "root", prefix: "", local: "root", uri: "", attributes: {}, ns: {}, isSelfClosing: true, }, ], [ "closetag", { name: "root", prefix: "", local: "root", uri: "", attributes: {}, ns: {}, isSelfClosing: true, }, ], ], opt: { xmlns: true, }, }); test({ name: "unterminated value", xml: "", expect: [ ["error", "1:17: XML declaration is incomplete."], [ "xmldecl", { encoding: undefined, version: undefined, standalone: undefined, }, ], ["opentagstart", { name: "root", attributes: {}, ns: {} }], [ "opentag", { name: "root", prefix: "", local: "root", uri: "", attributes: {}, ns: {}, isSelfClosing: true, }, ], [ "closetag", { name: "root", prefix: "", local: "root", uri: "", attributes: {}, ns: {}, isSelfClosing: true, }, ], ], opt: { xmlns: true, }, }); test({ name: "bad version", xml: "", expect: [ ["error", "1:17: version number must match /^1\\.[0-9]+$/."], [ "xmldecl", { encoding: undefined, version: "a", standalone: undefined, }, ], ["opentagstart", { name: "root", attributes: {}, ns: {} }], [ "opentag", { name: "root", prefix: "", local: "root", uri: "", attributes: {}, ns: {}, isSelfClosing: true, }, ], [ "closetag", { name: "root", prefix: "", local: "root", uri: "", attributes: {}, ns: {}, isSelfClosing: true, }, ], ], opt: { xmlns: true, }, }); it("well-formed", () => { const parser = new SaxesParser(); let seen = false; parser.on("opentagstart", () => { expect(parser.xmlDecl).to.deep.equal({ version: "1.1", encoding: "utf-8", standalone: "yes", }); seen = true; }); parser.write( ""); parser.close(); expect(seen).to.be.true; }); function parse(source: string, options?: SaxesOptions): boolean { const parser = new SaxesParser(options); let error = false; parser.on("error", () => { error = true; }); parser.write(source); parser.close(); return error; } function makeDefaultXMLVersionTests( groupName: string, xmlDeclaration: string, document: string, expecteUnforcedResults: UnforcedExpectation[], expectedForcedResults: ForcedExpectation[] = []): void { describe(groupName, () => { for (const { version, expectError } of expecteUnforcedResults) { const errorLabel = expectError ? "errors" : "no errors"; const title = version === undefined ? `and without defaultXMLVersion: ${errorLabel}` : `and with defaultXMLVersion === ${version}: ${errorLabel}`; it(title, () => { expect(parse( xmlDeclaration + document, version === undefined ? undefined : { defaultXMLVersion: version })) .to.equal(expectError); }); } if (xmlDeclaration !== "") { for (const { version, expectError } of expectedForcedResults) { const errorLabel = expectError ? "errors" : "no errors"; it(`and with forced xml version ${version}: ${errorLabel}`, () => { expect(parse(xmlDeclaration + document, { defaultXMLVersion: version, forceXMLVersion: true, })).to.equal(expectError); }); } } }); } describe("document well-formed for 1.0, not 1.1", () => { makeDefaultXMLVersionTests("without XML declaration", "", WELL_FORMED_1_0_NOT_1_1, [{ version: undefined, expectError: false, }, { version: "1.0", expectError: false, }, { version: "1.1", expectError: true, }]); makeDefaultXMLVersionTests("with XML 1.0 declaration", XML_1_0_DECLARATION, WELL_FORMED_1_0_NOT_1_1, [{ version: undefined, expectError: false, }, { version: "1.0", expectError: false, }, { version: "1.1", // The XML declaration overrides // defaultXMLVersion. expectError: false, }], [{ version: "1.0", expectError: false, }, { version: "1.1", expectError: true, }]); makeDefaultXMLVersionTests("with XML 1.1 declaration", XML_1_1_DECLARATION, WELL_FORMED_1_0_NOT_1_1, [{ version: undefined, // The XML declaration overrides // defaultXMLVersion. expectError: true, }, { version: "1.0", // The XML declaration overrides // defaultXMLVersion. expectError: true, }, { version: "1.1", expectError: true, }], [{ version: "1.0", expectError: false, }, { version: "1.1", expectError: true, }]); }); describe("document well-formed for 1.1, not 1.0", () => { makeDefaultXMLVersionTests("without XML declaration", "", WELL_FORMED_1_1_NOT_1_0, [{ version: undefined, expectError: true, }, { version: "1.0", expectError: true, }, { version: "1.1", expectError: false, }]); makeDefaultXMLVersionTests("with XML 1.0 declaration", XML_1_0_DECLARATION, WELL_FORMED_1_1_NOT_1_0, [{ version: undefined, expectError: true, }, { version: "1.0", expectError: true, }, { version: "1.1", // The XML declaration overrides // defaultXMLVersion. expectError: true, }], [{ version: "1.0", expectError: true, }, { version: "1.1", expectError: false, }]); makeDefaultXMLVersionTests("with XML 1.1 declaration", XML_1_1_DECLARATION, WELL_FORMED_1_1_NOT_1_0, [{ version: undefined, // The XML declaration overrides // defaultXMLVersion. expectError: false, }, { version: "1.0", // The XML declaration overrides // defaultXMLVersion. expectError: false, }, { version: "1.1", expectError: false, }], [{ version: "1.0", expectError: true, }, { version: "1.1", expectError: false, }]); }); }); saxes-6.0.0/test/xml-internal-entities.ts000066400000000000000000000031631414202165000204210ustar00rootroot00000000000000import { SaxesParser } from "../build/dist/saxes"; import { test } from "./testutil"; // generates xml like test0="&control;" const entitiesToTest: Record = { // 'ENTITY_NAME': IS_VALID || invalidCharPos, "control0": true, // This is a vanilla control. // entityStart "_uscore": true, "#hash": false, ":colon": true, "-bad": false, ".bad": false, // general entity "u_score": true, "d-ash": true, "d.ot": true, "all:_#-.": false, }; let xmlStart = " = {}; myAttributes.test = "&"; let entI = 0; const attributeErrors = []; const ENTITIES: Record = {}; // eslint-disable-next-line guard-for-in for (const entity in entitiesToTest) { const attribName = `test${entI}`; const attribValue = `Testing ${entity}`; // add the first part to use in calculation below xmlStart += `${attribName}="&`; if (!entitiesToTest[entity]) { const pos = xmlStart.length + entity.length + 1; const msg = entity[0] === "#" ? "malformed character entity." : "disallowed character in entity name."; attributeErrors.push(["error", `1:${pos}: ${msg}`]); myAttributes[attribName] = `&${entity};`; } else { ENTITIES[entity] = attribValue; myAttributes[attribName] = attribValue; } xmlStart += `${entity};" `; entI++; } test({ name: "xml internal entities", expect: [ ...attributeErrors, ], // We only care about errrors for this test. events: ["error"], fn(parser: SaxesParser): void { Object.assign(parser.ENTITIES, ENTITIES); parser.write(`${xmlStart}/>`).close(); }, }); saxes-6.0.0/test/xmlns-as-tag-name.ts000066400000000000000000000012231414202165000174110ustar00rootroot00000000000000import { test } from "./testutil"; test({ name: "xmlns as tag name", xml: "", expect: [ [ "opentagstart", { name: "xmlns", attributes: {}, ns: {}, }, ], [ "opentag", { name: "xmlns", uri: "", prefix: "", local: "xmlns", attributes: {}, ns: {}, isSelfClosing: true, }, ], [ "closetag", { name: "xmlns", uri: "", prefix: "", local: "xmlns", attributes: {}, ns: {}, isSelfClosing: true, }, ], ], opt: { xmlns: true, }, }); saxes-6.0.0/test/xmlns-issue-41.ts000066400000000000000000000042311414202165000166730ustar00rootroot00000000000000import { test } from "./testutil"; const expect = [ ["opentagstart", { name: "parent", attributes: {}, ns: {} }], [ "attribute", { name: "xmlns:a", local: "a", prefix: "xmlns", value: "http://ATTRIBUTE", }, ], [ "attribute", { name: "a:attr", local: "attr", prefix: "a", value: "value", }, ], [ "opentag", { name: "parent", uri: "", prefix: "", local: "parent", attributes: { "a:attr": { name: "a:attr", local: "attr", prefix: "a", uri: "http://ATTRIBUTE", value: "value", }, "xmlns:a": { name: "xmlns:a", local: "a", prefix: "xmlns", uri: "http://www.w3.org/2000/xmlns/", value: "http://ATTRIBUTE", }, }, ns: { a: "http://ATTRIBUTE", }, isSelfClosing: true, }, ], [ "closetag", { name: "parent", uri: "", prefix: "", local: "parent", attributes: { "a:attr": { name: "a:attr", local: "attr", prefix: "a", uri: "http://ATTRIBUTE", value: "value", }, "xmlns:a": { name: "xmlns:a", local: "a", prefix: "xmlns", uri: "http://www.w3.org/2000/xmlns/", value: "http://ATTRIBUTE", }, }, ns: { a: "http://ATTRIBUTE", }, isSelfClosing: true, }, ], ]; // should be the same both ways. const xmls = [ "", "", ]; // Take the first expect array and create a new one with elements at indexes 1 // and 2 swapped. const expect2 = expect.slice(); const tmp = expect2[1]; // eslint-disable-next-line prefer-destructuring expect2[1] = expect2[2]; expect2[2] = tmp; const expects = [ expect, expect2, ]; describe("issue 41", () => { xmls.forEach((x, i) => { test({ name: `order ${i}`, xml: x, expect: expects[i], opt: { xmlns: true, }, }); }); }); saxes-6.0.0/test/xmlns-rebinding.ts000066400000000000000000000152731414202165000172720ustar00rootroot00000000000000import { test } from "./testutil"; test({ name: "xmlns rebinding", xml: "" + "" + "" + "" + "" + "", expect: [ [ "opentagstart", { name: "root", attributes: {}, ns: {}, }, ], [ "attribute", { name: "xmlns:x", value: "x1", prefix: "xmlns", local: "x", }, ], [ "attribute", { name: "xmlns:y", value: "y1", prefix: "xmlns", local: "y", }, ], [ "attribute", { name: "x:a", value: "x1", prefix: "x", local: "a", }, ], [ "attribute", { name: "y:a", value: "y1", prefix: "y", local: "a", }, ], [ "opentag", { name: "root", uri: "", prefix: "", local: "root", attributes: { "xmlns:x": { name: "xmlns:x", value: "x1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x", }, "xmlns:y": { name: "xmlns:y", value: "y1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "y", }, "x:a": { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a", }, "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a", }, }, ns: { x: "x1", y: "y1", }, isSelfClosing: false, }, ], [ "opentagstart", { name: "rebind", attributes: {}, ns: {}, }, ], [ "attribute", { name: "xmlns:x", value: "x2", prefix: "xmlns", local: "x", }, ], [ "opentag", { name: "rebind", uri: "", prefix: "", local: "rebind", attributes: { "xmlns:x": { name: "xmlns:x", value: "x2", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x", }, }, ns: { x: "x2", }, isSelfClosing: false, }, ], [ "opentagstart", { name: "check", attributes: {}, ns: {}, }, ], [ "attribute", { name: "x:a", value: "x2", prefix: "x", local: "a", }, ], [ "attribute", { name: "y:a", value: "y1", prefix: "y", local: "a", }, ], [ "opentag", { name: "check", uri: "", prefix: "", local: "check", attributes: { "x:a": { name: "x:a", value: "x2", uri: "x2", prefix: "x", local: "a", }, "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a", }, }, ns: {}, isSelfClosing: true, }, ], [ "closetag", { name: "check", uri: "", prefix: "", local: "check", attributes: { "x:a": { name: "x:a", value: "x2", uri: "x2", prefix: "x", local: "a", }, "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a", }, }, ns: {}, isSelfClosing: true, }, ], [ "closetag", { name: "rebind", uri: "", prefix: "", local: "rebind", attributes: { "xmlns:x": { name: "xmlns:x", value: "x2", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x", }, }, ns: { x: "x2", }, isSelfClosing: false, }, ], [ "opentagstart", { name: "check", attributes: {}, ns: {}, }, ], [ "attribute", { name: "x:a", value: "x1", prefix: "x", local: "a", }, ], [ "attribute", { name: "y:a", value: "y1", prefix: "y", local: "a", }, ], [ "opentag", { name: "check", uri: "", prefix: "", local: "check", attributes: { "x:a": { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a", }, "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a", }, }, ns: {}, isSelfClosing: true, }, ], [ "closetag", { name: "check", uri: "", prefix: "", local: "check", attributes: { "x:a": { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a", }, "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a", }, }, ns: {}, isSelfClosing: true, }, ], [ "closetag", { name: "root", uri: "", prefix: "", local: "root", attributes: { "xmlns:x": { name: "xmlns:x", value: "x1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "x", }, "xmlns:y": { name: "xmlns:y", value: "y1", uri: "http://www.w3.org/2000/xmlns/", prefix: "xmlns", local: "y", }, "x:a": { name: "x:a", value: "x1", uri: "x1", prefix: "x", local: "a", }, "y:a": { name: "y:a", value: "y1", uri: "y1", prefix: "y", local: "a", }, }, ns: { x: "x1", y: "y1", }, isSelfClosing: false, }, ], ], opt: { xmlns: true, }, }); saxes-6.0.0/test/xmlns-strict.ts000066400000000000000000000160701414202165000166350ustar00rootroot00000000000000import { test } from "./testutil"; test({ name: "xmlns strict", xml: "" + "" + "" + "" + "" + "" + "" + "" + "" + "", expect: [ [ "opentagstart", { name: "root", attributes: {}, ns: {}, }, ], [ "opentag", { name: "root", prefix: "", local: "root", uri: "", attributes: {}, ns: {}, isSelfClosing: false, }, ], [ "opentagstart", { name: "plain", attributes: {}, ns: {}, }, ], [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", }, ], [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "", attributes: { attr: { name: "attr", value: "normal", prefix: "", local: "attr", uri: "", }, }, ns: {}, isSelfClosing: true, }, ], [ "closetag", { name: "plain", prefix: "", local: "plain", uri: "", attributes: { attr: { name: "attr", value: "normal", prefix: "", local: "attr", uri: "", }, }, ns: {}, isSelfClosing: true, }, ], [ "opentagstart", { name: "ns1", attributes: {}, ns: {}, }, ], [ "attribute", { name: "xmlns", value: "uri:default", prefix: "", local: "xmlns", }, ], [ "opentag", { name: "ns1", prefix: "", local: "ns1", uri: "uri:default", attributes: { xmlns: { name: "xmlns", value: "uri:default", prefix: "", local: "xmlns", uri: "http://www.w3.org/2000/xmlns/", }, }, ns: { "": "uri:default", }, isSelfClosing: false, }, ], [ "opentagstart", { name: "plain", ns: {}, attributes: {}, }, ], [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", }, ], [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "uri:default", ns: {}, attributes: { attr: { name: "attr", value: "normal", prefix: "", local: "attr", uri: "", }, }, isSelfClosing: true, }, ], [ "closetag", { name: "plain", prefix: "", local: "plain", uri: "uri:default", ns: {}, attributes: { attr: { name: "attr", value: "normal", prefix: "", local: "attr", uri: "", }, }, isSelfClosing: true, }, ], [ "closetag", { name: "ns1", prefix: "", local: "ns1", uri: "uri:default", attributes: { xmlns: { name: "xmlns", value: "uri:default", prefix: "", local: "xmlns", uri: "http://www.w3.org/2000/xmlns/", }, }, ns: { "": "uri:default", }, isSelfClosing: false, }, ], [ "opentagstart", { name: "ns2", attributes: {}, ns: {}, }, ], [ "attribute", { name: "xmlns:a", value: "uri:nsa", prefix: "xmlns", local: "a", }, ], [ "opentag", { name: "ns2", prefix: "", local: "ns2", uri: "", attributes: { "xmlns:a": { name: "xmlns:a", value: "uri:nsa", prefix: "xmlns", local: "a", uri: "http://www.w3.org/2000/xmlns/", }, }, ns: { a: "uri:nsa", }, isSelfClosing: false, }, ], [ "opentagstart", { name: "plain", attributes: {}, ns: {}, }, ], [ "attribute", { name: "attr", value: "normal", prefix: "", local: "attr", }, ], [ "opentag", { name: "plain", prefix: "", local: "plain", uri: "", attributes: { attr: { name: "attr", value: "normal", prefix: "", local: "attr", uri: "", }, }, ns: {}, isSelfClosing: true, }, ], [ "closetag", { name: "plain", prefix: "", local: "plain", uri: "", attributes: { attr: { name: "attr", value: "normal", prefix: "", local: "attr", uri: "", }, }, ns: {}, isSelfClosing: true, }, ], [ "opentagstart", { name: "a:ns", attributes: {}, ns: {}, }, ], [ "attribute", { name: "a:attr", value: "namespaced", prefix: "a", local: "attr", }, ], [ "opentag", { name: "a:ns", prefix: "a", local: "ns", uri: "uri:nsa", attributes: { "a:attr": { name: "a:attr", value: "namespaced", prefix: "a", local: "attr", uri: "uri:nsa", }, }, ns: {}, isSelfClosing: true, }, ], [ "closetag", { name: "a:ns", prefix: "a", local: "ns", uri: "uri:nsa", attributes: { "a:attr": { name: "a:attr", value: "namespaced", prefix: "a", local: "attr", uri: "uri:nsa", }, }, ns: {}, isSelfClosing: true, }, ], [ "closetag", { name: "ns2", prefix: "", local: "ns2", uri: "", attributes: { "xmlns:a": { name: "xmlns:a", value: "uri:nsa", prefix: "xmlns", local: "a", uri: "http://www.w3.org/2000/xmlns/", }, }, ns: { a: "uri:nsa", }, isSelfClosing: false, }, ], [ "closetag", { name: "root", prefix: "", local: "root", uri: "", attributes: {}, ns: {}, isSelfClosing: false, }, ], ], opt: { xmlns: true, }, }); saxes-6.0.0/test/xmlns-unbound.ts000066400000000000000000000077301414202165000170020ustar00rootroot00000000000000import { SaxesParser } from "../build/dist/saxes"; import { test } from "./testutil"; describe("xmlns unbound prefixes", () => { test({ name: "unbound element", opt: { xmlns: true }, expect: [ [ "opentagstart", { name: "unbound:root", attributes: {}, ns: {}, }, ], [ "error", "1:15: unbound namespace prefix: \"unbound\".", ], [ "opentag", { name: "unbound:root", uri: "unbound", prefix: "unbound", local: "root", attributes: {}, ns: {}, isSelfClosing: true, }, ], [ "closetag", { name: "unbound:root", uri: "unbound", prefix: "unbound", local: "root", attributes: {}, ns: {}, isSelfClosing: true, }, ], ], fn(parser: SaxesParser): void { parser.write(""); }, }); test({ name: "bound element", opt: { xmlns: true, }, expect: [ [ "opentagstart", { name: "unbound:root", attributes: {}, ns: {}, }, ], [ "attribute", { name: "xmlns:unbound", value: "someuri", prefix: "xmlns", local: "unbound", }, ], [ "opentag", { name: "unbound:root", uri: "someuri", prefix: "unbound", local: "root", attributes: { "xmlns:unbound": { name: "xmlns:unbound", value: "someuri", prefix: "xmlns", local: "unbound", uri: "http://www.w3.org/2000/xmlns/", }, }, ns: { unbound: "someuri", }, isSelfClosing: true, }, ], [ "closetag", { name: "unbound:root", uri: "someuri", prefix: "unbound", local: "root", attributes: { "xmlns:unbound": { name: "xmlns:unbound", value: "someuri", prefix: "xmlns", local: "unbound", uri: "http://www.w3.org/2000/xmlns/", }, }, ns: { unbound: "someuri", }, isSelfClosing: true, }, ], ], fn(parser: SaxesParser): void { parser.write(""); }, }); test({ name: "unbound attribute", opt: { xmlns: true }, expect: [ [ "opentagstart", { name: "root", attributes: {}, ns: {}, }, ], [ "attribute", { name: "unbound:attr", value: "value", prefix: "unbound", local: "attr", }, ], [ "error", "1:28: unbound namespace prefix: \"unbound\".", ], [ "opentag", { name: "root", uri: "", prefix: "", local: "root", attributes: { "unbound:attr": { name: "unbound:attr", value: "value", uri: "unbound", prefix: "unbound", local: "attr", }, }, ns: {}, isSelfClosing: true, }, ], [ "closetag", { name: "root", uri: "", prefix: "", local: "root", attributes: { "unbound:attr": { name: "unbound:attr", value: "value", uri: "unbound", prefix: "unbound", local: "attr", }, }, ns: {}, isSelfClosing: true, }, ], ], fn(parser: SaxesParser): void { parser.write(""); }, }); }); saxes-6.0.0/test/xmlns-xml-default-ns.ts000066400000000000000000000025471414202165000201710ustar00rootroot00000000000000import { test } from "./testutil"; const xmlnsAttr = { name: "xmlns", value: "http://foo", prefix: "", local: "xmlns", uri: "http://www.w3.org/2000/xmlns/", }; const attrAttr = { name: "attr", value: "bar", prefix: "", local: "attr", uri: "", }; test({ name: "xmlns set default namespace", xml: "", expect: [ [ "opentagstart", { name: "elm", attributes: {}, ns: {}, }, ], [ "attribute", { name: "xmlns", value: "http://foo", prefix: "", local: "xmlns", }, ], [ "attribute", { name: "attr", value: "bar", prefix: "", local: "attr", }, ], [ "opentag", { name: "elm", prefix: "", local: "elm", uri: "http://foo", ns: { "": "http://foo" }, attributes: { xmlns: xmlnsAttr, attr: attrAttr, }, isSelfClosing: true, }, ], [ "closetag", { name: "elm", prefix: "", local: "elm", uri: "http://foo", ns: { "": "http://foo" }, attributes: { xmlns: xmlnsAttr, attr: attrAttr, }, isSelfClosing: true, }, ], ], opt: { xmlns: true, }, }); saxes-6.0.0/test/xmlns-xml-default-prefix.ts000066400000000000000000000072031414202165000210400ustar00rootroot00000000000000import { test } from "./testutil"; describe("xml default prefix", () => { test({ name: "element", xml: "", expect: [ [ "opentagstart", { name: "xml:root", attributes: {}, ns: {}, }, ], [ "opentag", { name: "xml:root", uri: "http://www.w3.org/XML/1998/namespace", prefix: "xml", local: "root", attributes: {}, ns: {}, isSelfClosing: true, }, ], [ "closetag", { name: "xml:root", uri: "http://www.w3.org/XML/1998/namespace", prefix: "xml", local: "root", attributes: {}, ns: {}, isSelfClosing: true, }, ], ], opt: { xmlns: true }, }); test({ name: "attribute", xml: "", expect: [ [ "opentagstart", { name: "root", attributes: {}, ns: {}, }, ], [ "attribute", { name: "xml:lang", local: "lang", prefix: "xml", value: "en", }, ], [ "opentag", { name: "root", uri: "", prefix: "", local: "root", attributes: { "xml:lang": { name: "xml:lang", local: "lang", prefix: "xml", uri: "http://www.w3.org/XML/1998/namespace", value: "en", }, }, ns: {}, isSelfClosing: true, }, ], [ "closetag", { name: "root", uri: "", prefix: "", local: "root", attributes: { "xml:lang": { name: "xml:lang", local: "lang", prefix: "xml", uri: "http://www.w3.org/XML/1998/namespace", value: "en", }, }, ns: {}, isSelfClosing: true, }, ], ], opt: { xmlns: true }, }); test({ name: "cannot be redefined", xml: "", expect: [ [ "opentagstart", { name: "xml:root", attributes: {}, ns: {}, }, ], [ "attribute", { name: "xmlns:xml", local: "xml", prefix: "xmlns", value: "ERROR", }, ], [ "error", "1:27: xml prefix must be bound to \ http://www.w3.org/XML/1998/namespace.", ], [ "opentag", { name: "xml:root", uri: "ERROR", prefix: "xml", local: "root", attributes: { "xmlns:xml": { name: "xmlns:xml", local: "xml", prefix: "xmlns", uri: "http://www.w3.org/2000/xmlns/", value: "ERROR", }, }, ns: { xml: "ERROR", }, isSelfClosing: true, }, ], [ "closetag", { name: "xml:root", uri: "ERROR", prefix: "xml", local: "root", attributes: { "xmlns:xml": { name: "xmlns:xml", local: "xml", prefix: "xmlns", uri: "http://www.w3.org/2000/xmlns/", value: "ERROR", }, }, ns: { xml: "ERROR", }, isSelfClosing: true, }, ], ], opt: { xmlns: true }, }); }); saxes-6.0.0/tsconfig.json000066400000000000000000000006151414202165000153440ustar00rootroot00000000000000{ "compilerOptions": { "target": "es6", "downlevelIteration": true, "module": "commonjs", "moduleResolution": "node", "declaration": true, "sourceMap": true, "outDir": "build/dist/", "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, "noImplicitReturns": true, "lib": ["es2016", "dom"] }, "include": [ "src/**/*.ts" ] }